codegenmips
Class MipsSupport

java.lang.Object
  extended by codegenmips.MipsSupport

public class MipsSupport
extends java.lang.Object

Mips assembly support create an object from this class for use in generating Mips code


Field Summary
 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
 int SYSCALL_SBRK
          sbrk syscall
 
Constructor Summary
MipsSupport(java.io.PrintStream out)
          MipsSupport constructor
 
Method Summary
 void genAdd(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate an add instruction
 void genAdd(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate an add instruction
 void genAlign()
          Generate word alignment directive
 void genAnd(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate an and instruction
 void genAnd(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          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 the code to start the data section
 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 destReg, java.lang.String srcReg, int imm)
          Generate a divide instruction
 void genDiv(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a divide instruction
 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 genLoadAddr(java.lang.String destReg, java.lang.String label)
          Generate a load address instruction
 void genLoadByte(java.lang.String destReg, int offset, java.lang.String baseReg)
          Generate a load byte instruction
 void genLoadImm(java.lang.String destReg, int imm)
          Generate a load immediate instruction
 void genLoadWord(java.lang.String destReg, int offset, java.lang.String baseReg)
          Generate a load word instruction
 void genMod(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate a modulus instruction
 void genMod(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a modulus instruction
 void genMove(java.lang.String destReg, java.lang.String srcReg)
          Generate a move instruction
 void genMul(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate a multiply instruction
 void genMul(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a multiply instruction
 void genNeg(java.lang.String destReg, java.lang.String srcReg)
          Generate a negation instruction
 void genNot(java.lang.String destReg, java.lang.String srcReg)
          Generate a not instruction
 void genOr(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate an or instruction
 void genOr(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate an or instruction
 void genRetn()
          Generate a return
 void genShiftLeft(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate a shift left instruction
 void genShiftLeft(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a shift left instruction
 void genShiftRight(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate a shift right instruction
 void genShiftRight(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a shift right instruction
 void genSpace(int n)
          Generate a data segment of size n
 void genStoreByte(java.lang.String srcReg, int offset, java.lang.String baseReg)
          Generate a store byte instruction
 void genStoreWord(java.lang.String srcReg, int offset, java.lang.String baseReg)
          Generate a store word instruction
 void genSub(java.lang.String destReg, java.lang.String srcReg, int imm)
          Generate a subtraction instruction
 void genSub(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate a subtraction instruction
 void genSyscall(int syscallId)
          Generate a system call
 void genTextStart()
          Generate the code to start the text 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 destReg, java.lang.String srcReg, int imm)
          Generate an xor instruction
 void genXor(java.lang.String destReg, java.lang.String srcReg1, java.lang.String srcReg2)
          Generate an xor instruction
 java.lang.String getArg0Reg()
          Get the argument register
 java.lang.String getArg1Reg()
          Get the second argument register
 java.lang.String getArg2Reg()
          Get the third argument register
 java.lang.String getFPReg()
          Get the frame pointer register
 java.lang.String getGPReg()
          Get the global 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 getRAReg()
          Get the return address register
 java.lang.String getResultReg()
          Get the result register
 java.lang.String getS0Reg()
          Get the first callee-saved register
 java.lang.String getS1Reg()
          Get the second callee-saved register
 java.lang.String getS2Reg()
          Get the third callee-saved register
 java.lang.String getS3Reg()
          Get the fourth callee-saved register
 java.lang.String getSPReg()
          Get the stack pointer register
 java.lang.String getT0Reg()
          Get the first temporary register
 java.lang.String getT1Reg()
          Get the second temporary register
 java.lang.String getT2Reg()
          Get the third temporary register
 java.lang.String getT3Reg()
          Get the fourth temporary register
 java.lang.String getThisReg()
          Get the register that holds 'this' pointer
 int getWordSize()
          Get the word size
 java.lang.String getZeroReg()
          Get the zero register
 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

SYSCALL_EXIT

public final int SYSCALL_EXIT
Exit syscall

See Also:
Constant Field Values

SYSCALL_FILE_OPEN

public final int SYSCALL_FILE_OPEN
File open syscall

See Also:
Constant Field Values

SYSCALL_FILE_CLOSE

public final int SYSCALL_FILE_CLOSE
File close syscall

See Also:
Constant Field Values

SYSCALL_FILE_READ

public final int SYSCALL_FILE_READ
File read syscall

See Also:
Constant Field Values

SYSCALL_FILE_WRITE

public final int SYSCALL_FILE_WRITE
File write syscall

See Also:
Constant Field Values

SYSCALL_GET_TIME

public final int SYSCALL_GET_TIME
Get time syscall

See Also:
Constant Field Values

SYSCALL_SBRK

public final int SYSCALL_SBRK
sbrk syscall

See Also:
Constant Field Values
Constructor Detail

MipsSupport

public MipsSupport(java.io.PrintStream out)
MipsSupport constructor

Parameters:
out - print stream
Method Detail

getNextAvailStackOffset

public int getNextAvailStackOffset()
Get next available stack offset

Returns:
next available stack offset

setNextAvailStackOffset

public void setNextAvailStackOffset(int offset)
Set next available stack offset

Parameters:
offset - new available stack offset

getZeroReg

public java.lang.String getZeroReg()
Get the zero register

Returns:
register that holds zero

getSPReg

public java.lang.String getSPReg()
Get the stack pointer register

Returns:
register name

getFPReg

public java.lang.String getFPReg()
Get the frame pointer register

Returns:
register name

getRAReg

public java.lang.String getRAReg()
Get the return address register

Returns:
register name

getGPReg

public java.lang.String getGPReg()
Get the global pointer register

Returns:
register name

getThisReg

public java.lang.String getThisReg()
Get the register that holds 'this' pointer

Returns:
register name

getArg0Reg

public java.lang.String getArg0Reg()
Get the argument register

Returns:
register name

getArg1Reg

public java.lang.String getArg1Reg()
Get the second argument register

Returns:
register name

getArg2Reg

public java.lang.String getArg2Reg()
Get the third argument register

Returns:
register name

getResultReg

public java.lang.String getResultReg()
Get the result register

Returns:
register name

getT0Reg

public java.lang.String getT0Reg()
Get the first temporary register

Returns:
register name

getT1Reg

public java.lang.String getT1Reg()
Get the second temporary register

Returns:
register name

getT2Reg

public java.lang.String getT2Reg()
Get the third temporary register

Returns:
register name

getT3Reg

public java.lang.String getT3Reg()
Get the fourth temporary register

Returns:
register name

getS0Reg

public java.lang.String getS0Reg()
Get the first callee-saved register

Returns:
register name

getS1Reg

public java.lang.String getS1Reg()
Get the second callee-saved register

Returns:
register name

getS2Reg

public java.lang.String getS2Reg()
Get the third callee-saved register

Returns:
register name

getS3Reg

public java.lang.String getS3Reg()
Get the fourth callee-saved register

Returns:
register name

genComment

public void genComment(java.lang.String text)
Generate the code to start the data section

Parameters:
text - text to put in comment

genDataStart

public void genDataStart()
Generate the code to start the data section


genTextStart

public void genTextStart()
Generate the code to start the text section


genGlobal

public void genGlobal(java.lang.String label)
Generate a global

Parameters:
label - label to make global

genWord

public void genWord(java.lang.String dataWord)
Generate a data word

Parameters:
dataWord - word string

genByte

public void genByte(java.lang.String dataByte)
Generate a data byte

Parameters:
dataByte - byte string

genSpace

public void genSpace(int n)
Generate a data segment of size n

Parameters:
n - size of data segment

genAscii

public void genAscii(java.lang.String ascii)
Generate an ASCII string (terminates with zero byte and aligns)

Parameters:
ascii - ASCII string

genAlign

public void genAlign()
Generate word alignment directive


getLabel

public java.lang.String getLabel()
Get a unique label for use with control flow

Returns:
label string

getWordSize

public int getWordSize()
Get the word size

Returns:
word size

genLoadWord

public void genLoadWord(java.lang.String destReg,
                        int offset,
                        java.lang.String baseReg)
Generate a load word instruction

Parameters:
destReg - string containing the destination register
offset - integer offset (must be a multiple of the word size)
baseReg - string containing the base register

genLoadByte

public void genLoadByte(java.lang.String destReg,
                        int offset,
                        java.lang.String baseReg)
Generate a load byte instruction

Parameters:
destReg - string containing the destination register
offset - integer offset
baseReg - string containing the base register

genStoreWord

public void genStoreWord(java.lang.String srcReg,
                         int offset,
                         java.lang.String baseReg)
Generate a store word instruction

Parameters:
srcReg - string containing the source register
offset - integer offset (must be a multiple of the word size)
baseReg - string containing the base register

genStoreByte

public void genStoreByte(java.lang.String srcReg,
                         int offset,
                         java.lang.String baseReg)
Generate a store byte instruction

Parameters:
srcReg - string containing the source register
offset - integer offset (must be a multiple of the word size)
baseReg - string containing the base register

genLoadAddr

public void genLoadAddr(java.lang.String destReg,
                        java.lang.String label)
Generate a load address instruction

Parameters:
destReg - string containing the destination register
label - address to load into destination register

genLoadImm

public void genLoadImm(java.lang.String destReg,
                       int imm)
Generate a load immediate instruction

Parameters:
destReg - string containing the destination register
imm - immediate to load into destination register

genAdd

public void genAdd(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate an add instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genAdd

public void genAdd(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate an add instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genSub

public void genSub(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate a subtraction instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genSub

public void genSub(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate a subtraction instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genMul

public void genMul(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate a multiply instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genMul

public void genMul(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate a multiply instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genDiv

public void genDiv(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate a divide instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genDiv

public void genDiv(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate a divide instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genMod

public void genMod(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate a modulus instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genMod

public void genMod(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate a modulus instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genAnd

public void genAnd(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate an and instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genAnd

public void genAnd(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate an and instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genOr

public void genOr(java.lang.String destReg,
                  java.lang.String srcReg1,
                  java.lang.String srcReg2)
Generate an or instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genOr

public void genOr(java.lang.String destReg,
                  java.lang.String srcReg,
                  int imm)
Generate an or instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genXor

public void genXor(java.lang.String destReg,
                   java.lang.String srcReg1,
                   java.lang.String srcReg2)
Generate an xor instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genXor

public void genXor(java.lang.String destReg,
                   java.lang.String srcReg,
                   int imm)
Generate an xor instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genShiftLeft

public void genShiftLeft(java.lang.String destReg,
                         java.lang.String srcReg1,
                         java.lang.String srcReg2)
Generate a shift left instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genShiftLeft

public void genShiftLeft(java.lang.String destReg,
                         java.lang.String srcReg,
                         int imm)
Generate a shift left instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genShiftRight

public void genShiftRight(java.lang.String destReg,
                          java.lang.String srcReg1,
                          java.lang.String srcReg2)
Generate a shift right instruction

Parameters:
destReg - string containing the destination register
srcReg1 - string containing the first source register
srcReg2 - string containing the second source register

genShiftRight

public void genShiftRight(java.lang.String destReg,
                          java.lang.String srcReg,
                          int imm)
Generate a shift right instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register
imm - signed immediate value

genMove

public void genMove(java.lang.String destReg,
                    java.lang.String srcReg)
Generate a move instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register

genNeg

public void genNeg(java.lang.String destReg,
                   java.lang.String srcReg)
Generate a negation instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register

genNot

public void genNot(java.lang.String destReg,
                   java.lang.String srcReg)
Generate a not instruction

Parameters:
destReg - string containing the destination register
srcReg - string containing the source register

genLabel

public void genLabel(java.lang.String label)
Generate a reference label

Parameters:
label - label string

genDirCall

public void genDirCall(java.lang.String label)
Generate a direct call

Parameters:
label - label string

genInDirCall

public void genInDirCall(java.lang.String reg)
Generate an indirect call

Parameters:
reg - register containing callee address

genRetn

public void genRetn()
Generate a return


genUncondBr

public void genUncondBr(java.lang.String label)
Generate an unconditional branch

Parameters:
label - label string

genCondBeq

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genCondBne

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genCondBlt

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genCondBleq

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genCondBgt

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genCondBgeq

public 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

Parameters:
reg1 - first register to compare
reg2 - second register to compare
label - label to branch to

genSyscall

public void genSyscall(int syscallId)
Generate a system call

Parameters:
syscallId - the system call number