Mips patterns ============= TEMP t_n --------------------------------------------------- LABEL label: --------------------------------------------------- CONST(0) zero ----------------------- CONST(CONST_16) addi Rd, zero, I_16 ----------------------- CONST(*) li Rd, * --------------------------------------------------- JUMP(NAME) b label ----------------------- JUMP(*) jr Rs --------------------------------------------------- NAME la Rd, label --------------------------------------------------- MOVE(MEM(+(*,CONST_16)),*), MOVE(MEM(+(CONST_16,*)),*) sw Rs, I_16(Rd) ----------------------- MOVE(MEM(*),*) sw Rs, 0(Rd) ----------------------- MOVE(*,*) move Rd, Rs --------------------------------------------------- BINOP(PLUS,*,*) add Rd, Rs1, Rs2 ----------------------- BINOP(PLUS,*,CONST_16), addi Rd, Rs, I_16 BINOP(PLUS,CONST_16,*) --------------------------------------------------- BINOP(MINUS,*,*) sub Rd, Rs1, Rs2 ----------------------- BINOP(MINUS,*,CONST_16) addi Rd, Rs, -I_16 --------------------------------------------------- BINOP(MUL,*,*) mulo Rd, Rs1, Rs2 ----------------------- BINOP(MUL,*,CONST_2^k) sll Rd, Rs, I_k BINOP(MUL,CONST_2^k,*) --------------------------------------------------- BINOP(DIV,*,*) div Rd, Rs1, Rs2 ----------------------- BINOP(DIV,*,CONST_2^k), sra Rd, Rs, I_k --------------------------------------------------- BINOP(AND,*,*) and Rd, Rs1, Rs2 ----------------------- BINOP(AND,*,CONST_16), andi Rd, Rs, I_16 BINOP(AND,CONST_16,*) --------------------------------------------------- BINOP(OR,*,*) or Rd, Rs1, Rs2 ----------------------- BINOP(OR,*,CONST_16), ori Rd, Rs, I_16 BINOP(OR,CONST_16,*) --------------------------------------------------- BINOP(LSHIFT,*,*) sllv Rd, Rs1, Rs2 ----------------------- BINOP(LSHIFT,*,CONST_16) sll Rd, Rs, I_16 --------------------------------------------------- BINOP(RSHIFT,*,*) srlv Rd, Rs1, Rs2 ----------------------- BINOP(RSHIFT,*,CONST_16) srl Rd, Rs, I_16 --------------------------------------------------- BINOP(ARSHIFT,*,*) srav Rd, Rs1, Rs2 ----------------------- BINOP(ARSHIFT,*,CONST_16) sra Rd, Rs, I_16 --------------------------------------------------- BINOP(BITXOR,*,*) xor Rd, Rs1, Rs2 ----------------------- BINOP(BITXOR,*,CONST_16), xori Rd, Rs, I_16 BINOP(BITXOR,CONST_16,*) --------------------------------------------------- MEM(+(CONST_16,*)), lw Rd, I_16(Rs) MEM(+(*,CONST_16)) ----------------------- MEM(*) lw Rd, 0(Rs) --------------------------------------------------- CJUMP(op,*,*,label,*) beq Rs1, Rs2, label bne Rs1, Rs2, label blt Rs1, Rs2, label bgt Rs1, Rs2, label ble Rs1, Rs2, label bge Rs1, Rs2, label --------------------------------------------------- CALL(*,*) move or sw for params label jal label ----------------------- else jalr Rs