COP 3402 meeting -*- Outline -*- * Other VM designs ** Designs seen previously ------------------------------------------ VM DESIGNS PREVIOUSLY SEEN 1-register machine == Tiny VM SRM (3 registers) == VM of Homework 1 ------------------------------------------ ... accumulator is target of all computation (limited support for subroutines) ... use registers to support computation (only JAL helps subroutines) ** Simplified RISC Machine (SRM) ------------------------------------------ SIMPLIFIED RISC MACHINE (SRM) 32 registers Num. Usage Name(s) ===================================== 0 always 0 $0 1 assembler temp. $at 2,3 function results $v0, $v1 4-7 function args $a0 - $a3 8-15 temporaries $t0 - $t7 16-23 saved temporaries $s0 - $s7 24,25 temporaries $t8, $t9 26,27 reserved for OS 28 globals pointer $gp 29 stack pointer $sp 30 frame pointer $fp 31 return address $ra ------------------------------------------ Can either use the symbolic name ($t1) or the numeric equivalent in assember ($9) ------------------------------------------ INSTRUCTIONS All fit in one word (32 bits) Register format: op:6 rs:5 rt:5, rd:5, shift:5 func:6 Immediate format: op:6 rs:5 rt:5 immed:16 Jump type: op:6 addr:26 Register Format Arithmetic and Logic (3 registers): 3 registers: ADD, SUB AND, BOR, NOR, XOR 2 registers: MUL, DIV 1 register: MFHI, MFLO Shifts (2 registers + shift): SLL, SRL Jump to register (1 register): JR Immediate Format Arithmetic (2 registers & immediate): ADDI Logical (2 registers & immediate): ANDI, BOI, XORI Comparison & jump (2 registers & offset): BEQ, BNE Comparisons to 0 (1 register & offset): BGEZ, BGTZ, BLEZ, BLTZ Load, Store name 1 register: Call, Return use static links ------------------------------------------ ... e.g., SUB s, t, d is GPR[d] <- GPR[s] - GPR[t] ... e.g., ADDI s, t, i GPR[t] <- GPR[s] + sgnExt(i) ... e.g., BOI s, t, i GPR[t] <- GPR[s] \/ zeroExt(i) ... e.g., BEQ s, t, o if GPR[s] == GPR[t] then PC <- PC+formOffset(o) where formOffset(o) = sgnExt(4*o) ... e.g., BGEZ s, o if GPR[s] >= 0 then PC <- PC+formOffset(o) so these will jump relative to the PC (== old(PC)+4)