|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcodegenx86.X86Support
public class X86Support
x86 assembly support create an object from this class for use in generating x86 code
| Field Summary | |
|---|---|
int |
SYSCALL_BRK
brk syscall |
int |
SYSCALL_EXIT
Exit syscall |
int |
SYSCALL_FILE_CLOSE
File close syscall |
int |
SYSCALL_FILE_OPEN
File open syscall |
int |
SYSCALL_FILE_READ
File read syscall |
int |
SYSCALL_FILE_WRITE
File write syscall |
int |
SYSCALL_GET_TIME
Get time syscall |
| Constructor Summary | |
|---|---|
X86Support(java.io.PrintStream out)
X86Support constructor |
|
| Method Summary | |
|---|---|
void |
genAdd(java.lang.String srcReg,
java.lang.String destReg)
Generate an add instruction |
void |
genAlign()
Generate word alignment directive |
void |
genAnd(java.lang.String srcReg,
java.lang.String destReg)
Generate an and instruction |
void |
genAscii(java.lang.String ascii)
Generate an ASCII string (terminates with zero byte and aligns) |
void |
genByte(java.lang.String dataByte)
Generate a data byte |
void |
genComment(java.lang.String text)
Generate a comment |
void |
genCondBeq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is equal to second operand |
void |
genCondBgeq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is greater than or equal to second operand |
void |
genCondBgt(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is greater than second operand |
void |
genCondBleq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is less than second operand |
void |
genCondBlt(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is less than or equal to second operand |
void |
genCondBne(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
Generate a conditional branch branches if first operand is not equal to second operand |
void |
genDataStart()
Generate the code to start the data section |
void |
genDirCall(java.lang.String label)
Generate a direct call |
void |
genDiv(java.lang.String srcReg)
Generate a divide instruction (note: puts quotient in %eax and remainder in %edx) |
void |
genGlobal(java.lang.String label)
Generate a global |
void |
genInDirCall(java.lang.String reg)
Generate an indirect call |
void |
genLabel(java.lang.String label)
Generate a reference label |
void |
genLoadByte()
Generate a load byte instruction Note: uses the address in %esi (this register), increments %esi, and automatically puts result in the accumulator (%eax) |
void |
genMod(java.lang.String srcReg)
Generate a modulus instruction (note: puts quotient in %eax and remainder in %edx) |
void |
genMove(int imm,
java.lang.String destReg)
Generate a move instruction - loads an immediate into a register |
void |
genMove(int offset,
java.lang.String baseReg,
java.lang.String destReg)
Generate a move instruction - loads a register value to memory |
void |
genMove(java.lang.String srcReg,
int offset,
java.lang.String baseReg)
Generate a move instruction - stores a register value to memory |
void |
genMove(java.lang.String src,
java.lang.String destReg)
Generate a move instruction - a register-to-register move or a load address depending on whether the source parameter is a register or a label |
void |
genMul(java.lang.String srcReg)
Generate a multiply instruction (note: puts result in %eax, also overwrites %edx with 0) |
void |
genNeg(java.lang.String reg)
Generate a negation instruction |
void |
genNot(java.lang.String reg)
Generate a not instruction |
void |
genOr(java.lang.String srcReg,
java.lang.String destReg)
Generate an or instruction |
void |
genPop(java.lang.String reg)
Generate a pop instruction |
void |
genPush(java.lang.String reg)
Generate a push instruction |
void |
genRetn()
Generate a return |
void |
genShiftLeft(java.lang.String destReg)
Generate a shift left instruction (note: shift amount is taken from %ecx) |
void |
genShiftRight(java.lang.String destReg)
Generate a shift right instruction (note: shift amount is taken from %ecx) |
void |
genSpace(int n)
Generate a data segment of size n |
void |
genStoreByte()
Generate a store word instruction Note: uses the address in %edi, increments %edi, and takes the value from the accumulator (%eax) |
void |
genSub(java.lang.String srcReg,
java.lang.String destReg)
Generate a subtraction instruction |
void |
genSyscall(int syscallId)
Generate a system call |
void |
genTextStart()
Generate the code to start the data section |
void |
genUncondBr(java.lang.String label)
Generate an unconditional branch |
void |
genWord(java.lang.String dataWord)
Generate a data word |
void |
genXor(java.lang.String srcReg,
java.lang.String destReg)
Generate an xor instruction |
java.lang.String |
getAccReg()
Get the accumulator register (note: this is eax) |
java.lang.String |
getEAXReg()
Get the eax register (note: this is the accumulator) |
java.lang.String |
getEBXReg()
Get the ebx register |
java.lang.String |
getECXReg()
Get the ecx register |
java.lang.String |
getEDIReg()
Get the edi register |
java.lang.String |
getEDXReg()
Get the edx register |
java.lang.String |
getESIReg()
Get the esi register (note: this is 'this' register) |
java.lang.String |
getFPReg()
Get the frame pointer register |
java.lang.String |
getLabel()
Get a unique label for use with control flow |
int |
getNextAvailStackOffset()
Get next available stack offset |
java.lang.String |
getSPReg()
Get the stack pointer register |
java.lang.String |
getThisReg()
Get the register that holds 'this' pointer (note: this is esi) |
int |
getWordSize()
Get the word size |
void |
setNextAvailStackOffset(int offset)
Set next available stack offset |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public final int SYSCALL_EXIT
public final int SYSCALL_FILE_OPEN
public final int SYSCALL_FILE_CLOSE
public final int SYSCALL_FILE_READ
public final int SYSCALL_FILE_WRITE
public final int SYSCALL_GET_TIME
public final int SYSCALL_BRK
| Constructor Detail |
|---|
public X86Support(java.io.PrintStream out)
out - print stream| Method Detail |
|---|
public int getNextAvailStackOffset()
public void setNextAvailStackOffset(int offset)
offset - new available stack offsetpublic java.lang.String getSPReg()
public java.lang.String getFPReg()
public java.lang.String getThisReg()
public java.lang.String getAccReg()
public java.lang.String getEAXReg()
public java.lang.String getEBXReg()
public java.lang.String getECXReg()
public java.lang.String getEDXReg()
public java.lang.String getEDIReg()
public java.lang.String getESIReg()
public void genComment(java.lang.String text)
text - text to put in commentpublic void genDataStart()
public void genTextStart()
public void genGlobal(java.lang.String label)
label - label to make globalpublic void genWord(java.lang.String dataWord)
dataWord - word stringpublic void genByte(java.lang.String dataByte)
dataByte - byte stringpublic void genSpace(int n)
n - size of data segmentpublic void genAscii(java.lang.String ascii)
ascii - ASCII stringpublic void genAlign()
public java.lang.String getLabel()
public int getWordSize()
public void genMove(java.lang.String src,
java.lang.String destReg)
src - string containing the source (register or label)destReg - string containing the destination register
public void genMove(int imm,
java.lang.String destReg)
imm - immediate to load into destination registerdestReg - string containing the destination register
public void genMove(int offset,
java.lang.String baseReg,
java.lang.String destReg)
offset - integer offset (must be a multiple of the word size)baseReg - string containing the base registerdestReg - string containing the destination register
public void genMove(java.lang.String srcReg,
int offset,
java.lang.String baseReg)
srcReg - string containing the source registeroffset - integer offset (must be a multiple of the word size)baseReg - string containing the base registerpublic void genLoadByte()
public void genStoreByte()
public void genPush(java.lang.String reg)
reg - string containing the register to push onto the stackpublic void genPop(java.lang.String reg)
reg - string containing the register to hold popped stack value
public void genAdd(java.lang.String srcReg,
java.lang.String destReg)
srcReg - string containing the source registerdestReg - string containing the destination register
public void genSub(java.lang.String srcReg,
java.lang.String destReg)
srcReg - string containing the source registerdestReg - string containing the destination registerpublic void genMul(java.lang.String srcReg)
srcReg - string containing the source registerpublic void genDiv(java.lang.String srcReg)
srcReg - string containing the source registerpublic void genMod(java.lang.String srcReg)
srcReg - string containing the source register
public void genAnd(java.lang.String srcReg,
java.lang.String destReg)
srcReg - string containing the source registerdestReg - string containing the destination register
public void genOr(java.lang.String srcReg,
java.lang.String destReg)
srcReg - string containing the source registerdestReg - string containing the destination register
public void genXor(java.lang.String srcReg,
java.lang.String destReg)
srcReg - string containing the source registerdestReg - string containing the destination registerpublic void genShiftLeft(java.lang.String destReg)
destReg - string containing the destination registerpublic void genShiftRight(java.lang.String destReg)
destReg - string containing the destination registerpublic void genNeg(java.lang.String reg)
reg - string containing the source and destination registerpublic void genNot(java.lang.String reg)
reg - string containing the source and destination registerpublic void genLabel(java.lang.String label)
label - label stringpublic void genDirCall(java.lang.String label)
label - label stringpublic void genInDirCall(java.lang.String reg)
reg - register containing callee addresspublic void genRetn()
public void genUncondBr(java.lang.String label)
label - label string
public void genCondBeq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch to
public void genCondBne(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch to
public void genCondBlt(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch to
public void genCondBleq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch to
public void genCondBgt(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch to
public void genCondBgeq(java.lang.String reg1,
java.lang.String reg2,
java.lang.String label)
reg1 - first register to comparereg2 - second register to comparelabel - label to branch topublic void genSyscall(int syscallId)
syscallId - the system call number
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||