coins.backend.gen
Class CodeGenerator_x86

java.lang.Object
  extended bycoins.backend.gen.CodeGenerator
      extended bycoins.backend.gen.CodeGenerator_x86

public class CodeGenerator_x86
extends CodeGenerator


Nested Class Summary
(package private)  class CodeGenerator_x86.RewrState
          State label for rewriting engine.
(package private)  class CodeGenerator_x86.State
          State label for instruction selection engine.
(package private) static class CodeGenerator_x86.X86Attr
          X86's function attribute
 
Nested classes inherited from class coins.backend.gen.CodeGenerator
CodeGenerator.FunctionAttr, CodeGenerator.LexpToString, CodeGenerator.Match
 
Field Summary
(package private) static int MAXREGPARAM
           
(package private)  ImList regCallClobbers
           
(package private)  CodeGenerator_x86.State[] stateVec
          State vector for labeling LIR nodes.
 
Fields inherited from class coins.backend.gen.CodeGenerator
addrType, asmWriter, convention, debOut, disableRewrite, F128, F32, F64, func, funcAttrTbl, I16, I32, I64, I8, INLINECOPYUNIT, lexpConv, lir, localEarlyRewritingTrig, localLateRewritingTrig, machineName, machineParams, module, optSpeed, ProcessFramesTrig, root, typeParamWord
 
Constructor Summary
CodeGenerator_x86()
          Create code generator engine.
 
Method Summary
 int alignForType(int type)
          Return alignment for type.
(package private)  java.lang.String defaultRegsetForType(int type)
          Return default register set for type.
 Transformer[] earlyRewritingSequence()
          Return early time pre-rewriting sequence.
(package private)  java.lang.String emitAfter(java.lang.String x, java.lang.String y)
           
(package private)  void emitBeginningOfSegment(java.io.PrintWriter out, java.lang.String segment)
          Emit beginning of segment
(package private)  void emitCommon(java.io.PrintWriter out, SymStatic symbol, int bytes)
          Emit data common
(package private)  void emitData(java.io.PrintWriter out, int type, LirNode node)
          Emit data
(package private)  java.lang.String emitLir(LirNode node)
          Expand emit-macro for LirNode.
(package private)  java.lang.String emitList(ImList form, boolean topLevel)
          Expand emit-macro for list form.
(package private)  boolean equalArg(LirNode x, LirNode y)
          Return true if variable x and y are same.
(package private)  java.lang.Object expandBuildMacro(ImList form)
          Expand building-macro.
(package private)  java.lang.String floatSizeSuffix(java.lang.Object arg)
          Return floating point memory's size.
(package private)  int fregNum(java.lang.Object operand)
          Return nonnegative number if operand is "%fX" register.
(package private)  int getCost1(LirNode t, int goal)
          Return the cost for LIR node t and goal nonterminal goal.
(package private)  int getCost2(LirNode t, int goal)
           
(package private)  Rule getRule(LirNode t, int goal)
          Return the chosen rule for LIR node t and goal nonterminal goal.
(package private)  void initLabeling(LirFactory lir)
          Initialize for labeling.
(package private)  void initRewriteLabeling()
          Initialization for rewriting.
(package private)  java.lang.Object jmac1(LirNode x)
          Decode SUBREG node.
(package private)  java.lang.String jmac10(java.lang.String x)
           
(package private)  java.lang.String jmac11(java.lang.String x)
           
(package private)  java.lang.String jmac12(java.lang.String type, java.lang.String x)
           
(package private)  java.lang.String jmac13(java.lang.String base, java.lang.String index)
           
(package private)  java.lang.String jmac14(java.lang.String con, java.lang.String reg)
           
(package private)  java.lang.String jmac15(java.lang.String reg, java.lang.String scale)
           
(package private)  java.lang.String jmac16(java.lang.String x)
          Return lower half register name.
(package private)  java.lang.String jmac17(java.lang.String x)
          Return lowest byte register name.
(package private)  java.lang.String jmac18(java.lang.String x)
          Return lower 32bit of memory/register/constant operand.
(package private)  java.lang.String jmac19(java.lang.String x)
          Return upper 32bit of memory/register/constant operand.
(package private)  java.lang.Object jmac2()
           
(package private)  java.lang.String jmac20(java.lang.Object f)
          Generate prologue sequence.
(package private)  java.lang.String jmac21(java.lang.Object f, java.lang.String rettype)
          Generate epilogue sequence.
(package private)  java.lang.String jmac22(java.lang.String con)
           
(package private)  java.lang.String jmac23(java.lang.String x)
           
(package private)  java.lang.String jmac24(java.lang.String x)
           
(package private)  java.lang.String jmac25(java.lang.String format, java.lang.Object args)
           
(package private)  java.lang.Object jmac3()
           
(package private)  java.lang.Object jmac4()
           
(package private)  java.lang.Object jmac5()
           
(package private)  java.lang.String jmac6(java.lang.String x, java.lang.String y)
           
(package private)  java.lang.String jmac7(java.lang.String x, java.lang.String y)
           
(package private)  java.lang.String jmac8(java.lang.String x, java.lang.String y)
           
(package private)  java.lang.String jmac9(java.lang.String x)
           
(package private)  void labelTree(LirNode t)
          Label LIR tree t.
 Transformer[] lateRewritingSequence()
          Return late time pre-rewriting sequence.
(package private)  java.lang.String makeAsmSymbol(java.lang.String symbol)
          Convert symbol to assembler form.
(package private)  int makeVaStart(LirNode arg)
          Return offset for va_start position.
(package private)  CodeGenerator.FunctionAttr newFunctionAttr(Function func)
          Prepare new function attribute information.
(package private)  void peepHoleOpt(BiList list)
          Postprocess list-form assembler source.
(package private)  void postRewriteFloatOps(BiList list)
          Postrewrite floating point instructions.
(package private)  java.lang.Object quiltLir(LirNode node)
          Expand building-macro, for LirNode
(package private)  LirNode returnReg(int type)
          Return the register for value returned.
(package private)  LirNode rewriteCall(LirNode node, BiList pre, BiList post)
          Rewrite CALL node.
(package private)  LirNode rewriteEpilogue(LirNode node, BiList pre)
          Rewrite EPILOGUE
(package private)  LirNode rewriteFrame(LirNode node)
          Rewrite FRAME node to target machine form.
(package private)  LirNode rewritePrologue(LirNode node, BiList post)
          Rewrite PROLOGUE
(package private)  LirNode rewriteTree(LirNode tree, java.lang.String phase, BiList pre, BiList post)
          Rewrite L-expression.
(package private)  java.lang.String segmentForConst()
          Return segment for read-only constant.
(package private)  void setAllocaCalled()
          Set alloca called.
(package private)  java.lang.String showLabel(LirNode t)
          Return label state
(package private)  int startNT()
          Return start nonterminal symbol.
(package private)  LirNode stripConv(LirNode tree)
           
(package private)  int tregNum(java.lang.Object operand)
          Return nonnegative number if operand is "%tX" register.
 
Methods inherited from class coins.backend.gen.CodeGenerator
buildCode, clcvnClobbers, clcvnParamMem, clcvnParamOffset, clcvnParamReg, clcvnParamWord, clcvnPartialWord, clcvnPassFloatRegMem, clcvnRegLimit, clcvnReturnValue, clcvnSetPartialWord, clcvnStructReturnAsFirst, clcvnStructReturnPtr, close, codeInfo, convToAsm, dropRegToFrame, emitAlign, emitAsmCode, emitBeginningOfModule, emitCode, emitCodeLabel, emitComment, emitDataLabel, emitEndOfModule, emitEndOfSegment, emitIdent, emitLinkage, emitLirDefault, emitListDefault, emitNamedConst, emitObject, emitObjectX, emitSegment, emitTop, emitZeros, frameIsEmpty, frameSize, genHeader, genTrailer, getFunctionAttr, getMachineParams, initialize, initializeMachineDep, insertPostProcessor, instructionSelection, isComplex, isSimple, makeLabelDef, mapRegToFrame, nActualOperands, noRescan, notifyEndToPostProcessor, paramOffset, paramToBeSaved, phyReg, prepareCodeInfo, prerewrite, printLabel, quiltLirDefault, reduce, reserveFrame, rewriteAggregateCopy, rewriteAsm, rewriteCONVFU, rewriteCONVUF, rewriteJumpn, setAsmStream
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

stateVec

CodeGenerator_x86.State[] stateVec
State vector for labeling LIR nodes. Suffix is a LirNode's id.


regCallClobbers

ImList regCallClobbers

MAXREGPARAM

static final int MAXREGPARAM
See Also:
Constant Field Values
Constructor Detail

CodeGenerator_x86

public CodeGenerator_x86()
Create code generator engine.

Method Detail

initRewriteLabeling

void initRewriteLabeling()
Description copied from class: CodeGenerator
Initialization for rewriting.

Specified by:
initRewriteLabeling in class CodeGenerator

rewriteTree

LirNode rewriteTree(LirNode tree,
                    java.lang.String phase,
                    BiList pre,
                    BiList post)
Rewrite L-expression.

Specified by:
rewriteTree in class CodeGenerator

defaultRegsetForType

java.lang.String defaultRegsetForType(int type)
Return default register set for type.

Specified by:
defaultRegsetForType in class CodeGenerator

initLabeling

void initLabeling(LirFactory lir)
Description copied from class: CodeGenerator
Initialize for labeling.

Specified by:
initLabeling in class CodeGenerator

showLabel

java.lang.String showLabel(LirNode t)
Description copied from class: CodeGenerator
Return label state

Specified by:
showLabel in class CodeGenerator

labelTree

void labelTree(LirNode t)
Description copied from class: CodeGenerator
Label LIR tree t.

Specified by:
labelTree in class CodeGenerator

getRule

Rule getRule(LirNode t,
             int goal)
Description copied from class: CodeGenerator
Return the chosen rule for LIR node t and goal nonterminal goal.

Specified by:
getRule in class CodeGenerator

getCost1

int getCost1(LirNode t,
             int goal)
Description copied from class: CodeGenerator
Return the cost for LIR node t and goal nonterminal goal.

Specified by:
getCost1 in class CodeGenerator

getCost2

int getCost2(LirNode t,
             int goal)
Specified by:
getCost2 in class CodeGenerator

startNT

int startNT()
Description copied from class: CodeGenerator
Return start nonterminal symbol.

Specified by:
startNT in class CodeGenerator

expandBuildMacro

java.lang.Object expandBuildMacro(ImList form)
Expand building-macro.

Specified by:
expandBuildMacro in class CodeGenerator

quiltLir

java.lang.Object quiltLir(LirNode node)
Expand building-macro, for LirNode

Specified by:
quiltLir in class CodeGenerator

emitList

java.lang.String emitList(ImList form,
                          boolean topLevel)
Expand emit-macro for list form.

Specified by:
emitList in class CodeGenerator

emitLir

java.lang.String emitLir(LirNode node)
Expand emit-macro for LirNode.

Specified by:
emitLir in class CodeGenerator

newFunctionAttr

CodeGenerator.FunctionAttr newFunctionAttr(Function func)
Description copied from class: CodeGenerator
Prepare new function attribute information.

Overrides:
newFunctionAttr in class CodeGenerator

setAllocaCalled

void setAllocaCalled()
Set alloca called.


makeVaStart

int makeVaStart(LirNode arg)
Return offset for va_start position.


equalArg

boolean equalArg(LirNode x,
                 LirNode y)
Description copied from class: CodeGenerator
Return true if variable x and y are same.

Overrides:
equalArg in class CodeGenerator

stripConv

LirNode stripConv(LirNode tree)

rewriteFrame

LirNode rewriteFrame(LirNode node)
Rewrite FRAME node to target machine form.

Overrides:
rewriteFrame in class CodeGenerator

earlyRewritingSequence

public Transformer[] earlyRewritingSequence()
Return early time pre-rewriting sequence.

Overrides:
earlyRewritingSequence in class CodeGenerator

lateRewritingSequence

public Transformer[] lateRewritingSequence()
Return late time pre-rewriting sequence.

Overrides:
lateRewritingSequence in class CodeGenerator

rewritePrologue

LirNode rewritePrologue(LirNode node,
                        BiList post)
Rewrite PROLOGUE

Overrides:
rewritePrologue in class CodeGenerator

returnReg

LirNode returnReg(int type)
Return the register for value returned.


rewriteEpilogue

LirNode rewriteEpilogue(LirNode node,
                        BiList pre)
Rewrite EPILOGUE

Overrides:
rewriteEpilogue in class CodeGenerator

rewriteCall

LirNode rewriteCall(LirNode node,
                    BiList pre,
                    BiList post)
Rewrite CALL node.

Overrides:
rewriteCall in class CodeGenerator

peepHoleOpt

void peepHoleOpt(BiList list)
Postprocess list-form assembler source.

Overrides:
peepHoleOpt in class CodeGenerator
Parameters:
list - assembler source in list form.

postRewriteFloatOps

void postRewriteFloatOps(BiList list)
Postrewrite floating point instructions.


tregNum

int tregNum(java.lang.Object operand)
Return nonnegative number if operand is "%tX" register.

Parameters:
operand - to be tested.
Returns:
register number, or -1 if operand is not a %t register.

fregNum

int fregNum(java.lang.Object operand)
Return nonnegative number if operand is "%fX" register.

Parameters:
operand - to be tested.
Returns:
register number, or -1 if operand is not a %t register.

floatSizeSuffix

java.lang.String floatSizeSuffix(java.lang.Object arg)
Return floating point memory's size.

Parameters:
arg - memory operand list.
Returns:
"s" for float, "d" for double.

jmac1

java.lang.Object jmac1(LirNode x)
Decode SUBREG node.


jmac2

java.lang.Object jmac2()

jmac3

java.lang.Object jmac3()

jmac4

java.lang.Object jmac4()

jmac5

java.lang.Object jmac5()

jmac6

java.lang.String jmac6(java.lang.String x,
                       java.lang.String y)

emitAfter

java.lang.String emitAfter(java.lang.String x,
                           java.lang.String y)

jmac7

java.lang.String jmac7(java.lang.String x,
                       java.lang.String y)

jmac8

java.lang.String jmac8(java.lang.String x,
                       java.lang.String y)

jmac9

java.lang.String jmac9(java.lang.String x)

jmac10

java.lang.String jmac10(java.lang.String x)

jmac11

java.lang.String jmac11(java.lang.String x)

jmac12

java.lang.String jmac12(java.lang.String type,
                        java.lang.String x)

jmac13

java.lang.String jmac13(java.lang.String base,
                        java.lang.String index)

jmac14

java.lang.String jmac14(java.lang.String con,
                        java.lang.String reg)

jmac15

java.lang.String jmac15(java.lang.String reg,
                        java.lang.String scale)

jmac16

java.lang.String jmac16(java.lang.String x)
Return lower half register name.


jmac17

java.lang.String jmac17(java.lang.String x)
Return lowest byte register name.


jmac18

java.lang.String jmac18(java.lang.String x)
Return lower 32bit of memory/register/constant operand.


jmac19

java.lang.String jmac19(java.lang.String x)
Return upper 32bit of memory/register/constant operand.


jmac20

java.lang.String jmac20(java.lang.Object f)
Generate prologue sequence.


jmac21

java.lang.String jmac21(java.lang.Object f,
                        java.lang.String rettype)
Generate epilogue sequence.


jmac22

java.lang.String jmac22(java.lang.String con)

jmac23

java.lang.String jmac23(java.lang.String x)

jmac24

java.lang.String jmac24(java.lang.String x)

jmac25

java.lang.String jmac25(java.lang.String format,
                        java.lang.Object args)

emitBeginningOfSegment

void emitBeginningOfSegment(java.io.PrintWriter out,
                            java.lang.String segment)
Emit beginning of segment

Overrides:
emitBeginningOfSegment in class CodeGenerator

makeAsmSymbol

java.lang.String makeAsmSymbol(java.lang.String symbol)
Convert symbol to assembler form. Prepend "_" when cygwin (COFF), untouched otherwise (ELF).

Overrides:
makeAsmSymbol in class CodeGenerator

alignForType

public int alignForType(int type)
Description copied from class: CodeGenerator
Return alignment for type.

Overrides:
alignForType in class CodeGenerator

segmentForConst

java.lang.String segmentForConst()
Description copied from class: CodeGenerator
Return segment for read-only constant.

Overrides:
segmentForConst in class CodeGenerator

emitData

void emitData(java.io.PrintWriter out,
              int type,
              LirNode node)
Emit data

Overrides:
emitData in class CodeGenerator

emitCommon

void emitCommon(java.io.PrintWriter out,
                SymStatic symbol,
                int bytes)
Emit data common

Overrides:
emitCommon in class CodeGenerator