CSE 675.02: Introduction to Computer Architecture Instruction Set Architecture of MIPS Processor Presentation B Slides by Gojko Babić 06/21/2005 MIPS Processor M e m ory C PU C op ro ce ssor 1 (F P U ) R e giste rs R e giste rs $0 $0 $31 $31 Arithm e tic Logic unit Prog. Counter Control M ultip ly divide Lo Arithm e tic unit Hi C op ro ce ssor 0 (tra ps a nd m e m ory) R e giste rs Ba d V Ad dr C a use S ta tu s EPC Figure A.10.1 g. babic Presentation B 2 MIPS Registers • CPU: – 32 32-bit general purpose registers – GPRs (r0 – r31); r0 has fixed value of zero. Attempt to writing into r0 is not illegal, but its value will not change; – two 32-bit registers – Hi & Lo, hold results of integer multiply and divide – 32-bit program counter – PC; • Floating Point Processor – FPU (Coprocessor 1 – CP1): – 32 32-bit floating point registers – FPRs (f0 – f31); – five control registers; g. babic Presentation B 3 MIPS Registers (continued) • Coprocessor 0 – CP0 is incorporated on the MIPS CPU chip and it provides functions necessary to support operating system: exception handling, memory management scheduling and control of critical resources. • Coprocessor 0 (CP0) registers (partial list): – Status register (CP0reg12) – processor status and control; – Cause register (CP0reg13) – cause of the most recent exception; – EPC register (CP0reg14) – program counter at the last exception; – BadVAddr register (CP0reg08) – the address for the most recent address related exception; g. babic Presentation B 4 MIPS Data Types • MIPS operates on: – 32-bit (unsigned or 2’s complement) integers, – 32-bit (single precision floating point) real numbers, – 64-bit (double precision floating point) real numbers; • bytes and half words loaded into GPRs are either zero or sign bit expanded to fill the 32 bits; • only 32-bit units can be loaded into FPRs; 32-bit real numbers are stored in even numbered FPRs. • 64-bit real numbers are stored in two consecutive FPRs, starting with even-numbered register. g. babic Presentation B 5 MIPS arithmetic • All instructions have 3 operands • Operand order is fixed (destination first) Example: C code: a = b + c MIPS ‘code’: add a, b, c “The natural number of operands for an operation like addition is three…requiring every instruction to have exactly three operands, no more and no less, conforms to the philosophy of keeping the hardware simple” MIPS arithmetic • Design Principle: simplicity favors regularity. • Of course this complicates some things... C code: a = b + c + d; MIPS code: add a, b, c add a, a, d • Operands must be registers, only 32 registers provided • Each register contains 32 bits • Design Principle: smaller is faster. Why? Registers vs. Memory • Arithmetic instructions operands must be registers, — only 32 registers provided • Compiler associates variables with registers • What about programs with lots of variables Control Input Memory Datapath Processor Output I/O Memory Organization • Viewed as a large, single-dimension array, with an address. 0 • A memory address is an index 1 into the array 2 3 • "Byte addressing" means that 4 the index points to a byte of 5 6 memory. 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data ... MIPS Addressing Modes • register addressing; • immediate addressing; • only one memory data addressing: – register content plus offset (register indexed); • since r0 always contains value 0: – r0 + offset absolute addressing; • offset = 0 register indirect; • MIPS supports byte addressability: – it means that a byte is the smallest unit with its address; • MIPS supports 32-bit addresses: – it means that an address is given as 32-bit unsigned integer; g. babic Presentation B 10 Memory Organization • Bytes are nice, but most data items use larger "words" • For MIPS, a word is 32 bits or 4 bytes. 0 4 8 12 ... 32 bits of data 32 bits of data Registers hold 32 bits of data 32 bits of data 32 bits of data • 232 bytes with byte addresses from 0 to 232-1 • 230 words with byte addresses 0, 4, 8, ... 232-4 • Words are aligned i.e., what are the least 2 significant bits of a word address? MIPS Alignment • MIPS restricts memory accesses to be aligned as follows: – 32-bit word has to start at byte address that is multiple of 4; 32-bit word at address 4n includes four bytes with addresses 4n, 4n+1, 4n+2, and 4n+3. – 16-bit half word has to start at byte address that is multiple of 2; 16-bit word at address 2n includes two bytes with addresses 2n and 2n+1. g. babic Presentation B 12 MIPS Instructions • 32-bit fixed format instruction and 3 formats; • register – register and register-immediate computational instructions; • single address mode for load/store instructions: – register content + offset (called base addressing); • simple branch conditions; – branch instructions use PC relative addressing; – branch address = [PC] + 4 + 4×offset • jump instructions with: – 28-bit addresses (jumps inside 256 megabyte regions), or – absolute 32-bit addresses. g. babic Presentation B 13 Our First Example • Can we figure out the code? Guess!!! swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 MIPS Instruction (continued) • Instructions that move data: – load to register from memory, – store from register to memory, – move between registers in same and different coprocessors • ALU integer instructions, • Floating point instructions, • Control-related instructions, • Special control-related instructions. g. babic Presentation B 15 Stored Program Concept • Instructions are bits • Programs are stored in memory — to be read or written just like data memory for data, programs, compilers, editors, etc. Processor Memory • Fetch & Execute Cycle – Instructions are fetched and put into a special register – Bits in the register "control" the subsequent actions – Fetch the “next” instruction and continue MIPS Instruction Layout • MIPS instructions are an example of fixed field decoding /ft /offset /ft /fs /fd and fd fs funct ft jump_target g. babic Presentation B 17 CPU Load & Store Instructions • lw rt, offset(rs) ; load 32-bits: Regs[rt] Mem [offset+Regs[rs]] • sw rt, offset(rs) ; store 32-bits: Mem [offset+Regs[rs]] Regs[rt] • lb rt, offset(rs) ; load 8-bits (byte): Regs[rt] 24-bit sign-extend || Mem [offset+Regs[rs]] Note: || means concatenation. • lbu rt, offset(rs) ; load 8-bits (byte) unsigned: Regs[rt] 24-bit zero-extend || Mem [offset+Regs[rs]] • sh rt, offset(rs) ; store 16-bits: Mem [offset+Regs[rs]] Regs[rt] (16 least significant bits taken from the register) Plus: sb, lh, & lhu g. babic Presentation B 18 FP Load, Store & Move Instructions • lwc1 ft, offset(rs) ; load into FP register: Regs[ft] Mem [offset+Regs[rs]] • swc1 ft, offset(rs) ; store from FP register: Mem [offset+Regs[rs]] Regs[ft] • mov.d fd, fs ; move FP double precision between FPRs: Regs[fd] || Regs[fd+1] Regs[fs] || Regs[fs+1] • mov.s fd, fs ; move FP single precision between FPRs: Regs[fd] Regs[fs] g. babic Presentation B 19 Move Instructions • mfc1 rt, fs ; move from FPU to CPU: Regs[rt] Regs[fs] • mtc1 rt, fs ; move from CPU to FPU: Regs[fs] Regs[rt] • mfc0 rt, rd ; move from CP0 to CPU: Regs[rt] CP0Regs[rd] • mtc0 rt, rd ; move from CPU to CP0: CP0Regs[rd] Regs[rt] • mfhi rd ; move from Hi: Regs[rd] Hi; • mflo rd ; move from Lo: Regs[rd] Lo; g. babic Presentation B 20 ALU Integer Instructions • add rd, rs, rt ; add integer@: Regs[rd] Regs[rs] + Regs[rt] Note: Instructions flagged by @ may cause an arithmetic exception. • addi rt, rs, immediate ; add immediate integer@: Regs[rt] Regs[rs] + 16-bit sign-extend || immediate • and rd, rs, rt ; bit-wise AND 32 bits: Regs[rd] Regs[rs] AND Regs[rt] • andi rt, rs, immediate ; bit-wise AND immediate 32 bits: Regs[rt] Regs[rs] AND 16-bit zero-extend || immediate • slt rd, rs, rt ; set less than integer: if (Regs[rs] < Regs[rt]) then Regs[rd] 1 else Regs[rd] 0 g. babic Presentation B 21 ALU Integer Instructions (continued) • mul rs, rt ; multiply integer: Hi || Lo Regs[rs] × Regs[rt] Note: mul does not generate an arithmetic exception, since a storage for the result is always sufficiently large. • div rs, rt ; divide integer: Lo Regs[rs] / Regs[rt] Hi Regs[rs] mod Regs[rt] Note: div does not generate an arithmetic exception and software should test for zero divisor. • sll rd, rt, shamt ; shift left logical: Regs[rd] Regs[rt] << shamt • lui rt, immediate ; load upper immediate: Regs[rt] immediate || 16 zero-bits g. babic Presentation B 22 ALU Integer Instructions (continued) • addu rd, rs, rt ; add unsigned integer: Regs[rd] Regs[rs] + Regs[rt] Note: This instruction does not cause an arithmetic exception. Plus: addiu, sub @, subu, mulu, divu, or, ori, xor, xori, nor, slti, sltu, sltiu, srl, sra • Instructions addu, addiu, subu, mulu, divu, sltu, and sltiu operate on unsigned numbers and these instructions do not trap on overflow. They are appropriate for unsigned arithmetic, such as address arithmetic, or in integer arithmetic environment that ignores overflow, such as C language arithmetic. g. babic Presentation B 23 Arithmetic FP Instructions • add.d fd, fs, ft ; FP double precision add: Regs[fd]||Regs[fd+1] Regs[fs]||Regs[fs+1] + Regs[ft]||Regs[ft+1] • mul.s fd, fs, ft ; FP single precision multiply: Regs[fd] Regs[fs] × Regs[ft] Plus: add.s, sub.d, sub.s, mul.d, div.d, div.s, several convert floating point to/from integer instructions, several compare instructions. Note: Any of instructions above may cause FP exception. All instructions presented so far, in addition, increment the program counter PC by 4, i.e. PC [PC] + 4 g. babic Presentation B 24 Control Related Instructions - Jumps • jr rs ; jump register: PC Regs[rs] • jalr rs,rd ; jump and link register: Regs[rd] [PC]+4; PC Regs[rs] • j jump_target ; jump inside 256 MB region: PC low order 28 bits jump_target || 2 zero-bits • jal jump_target ; jump inside 256 MB region and link: Regs[31] [PC]+4 PC low order 28 bits jump_target || 2 zero-bits g. babic Presentation B 25 Control Related Instructions - Branches • beq rs, rt, offset ; branch on equal: if (Regs[rs] = Regs[rt]) then PC [PC]+4+ 14-bit sign extend || offset || 2 zero-bits else PC[PC]+4 • bne rs, rt, offset ; branch on not equal: if (Regs[rs] != Regs[rt]) then PC[PC]+4+ 14-bit sign extend || offset || 2 zero-bits else PC[PC]+4 • bgez rs, offset ; branch on greater or equal zero: if (Regs[rs] ≥ 0) then PC[PC]+4+ 14-bit sign-extend || offset || 2 zero-bits else PC[PC]+4 Plus: bgtz, blez, bltz g. babic Presentation B 26 Illustration of MIPS Addressing Modes 1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd ... funct Registers Register 3. Base addressing op rs offset Address rt + Register 4. PC-relative addressing op rs rt PC Memory offset Address Byte Halfword Word Memory + 5. Pseudodirect addressing jump_target op Address Word Memory Word PC Figure 2.24 g. babic Presentation B 27 Special Control - Related Instructions • syscall ; to cause a syscall exception Encoding: 000000 00000000000000000000 001100 • break ; to cause a break exception Encoding: 000000 00000000000000000000 001101 • teq rs, rt ; trap exception if equal: if (Regs[rs] == Regs[rt]) then trap exception • tlti rs, immediate ; trap exception if less than immediate: if (Regs[rs] < 48-bit sign-extend || immediate then trap exception • eret ; return from exception Plus: several additional conditional trap instructions g. babic Presentation B 28 CPU Modes and Address Spaces There are two processor (CPU) modes of operation: • Kernel (Supervisor) Mode and • User Mode The processor is in Kernel Mode when CPU mode bit in Status register is set to one. The processor enters Kernel Mode at power-up, or as result of an interrupt, exception, or error. The processor leaves Kernel Mode and enters User Mode when the CPU mode bit is set to zero (by some instruction). Memory address space is divided in two ranges (simplified): • User address space – addresses in the range [0 – 7FFFFFFF16] • Kernel address space – addresses in the range [8000000016 – FFFFFFFF16] g. babic Presentation B 29 Privilege Instructions When operating in User Mode, processor has access only to the CPU and FPU registers, while when operating in Kernel Mode, processor has access to the full capabilities of processor including CP0 registers. Privileged instructions can not be executed when the processor is in User mode, i.e. they can be executed only when the processor is in Kernel mode Examples of MIPS privileged instructions: • any instruction that accesses Kernel address space, • mfc0 – move word from CP0 to CPU, • mtc0 – move word to CP0 from CPU, • lwc0 – load (from memory) word into CP0, • swc0 – store (into memory) word from CP0. g. babic Presentation B 30 MIPS Exceptions: A Subset There are four sets of causes for an exception. A. Exceptions caused by hardware malfunctioning: • Machine Check: Processor detects internal inconsistency; • Bus Error: on a load or store instruction, or instruction fetch; B. Exceptions caused by some external causes (to the processor): • Reset: A signal asserted on the appropriate pin; • NMI: Non-maskable interrupt – serious hardware problems • Hardware Interrupts: Six hardware interrupt requests can be made via asserting signal on any of 6 external pins. Hardware interrupts can be masked by setting appropriate bits in Status register; g. babic Presentation B 31 Exceptions by External Causes Reset IRQ 1 NMI g. babic Presentation B 32 MIPS Exceptions: A Subset (continued) C. Exceptions that occur as result of instruction problems: • Address Error: a reference to a nonexistent memory segment, or a reference to Kernel address space from User Mode; • Reserved Instruction: A undefined opcode field (or privileged instruction in User mode) is executed; • Integer Overflow: An integer instruction results in a 2’s complement overflow; • Floating Point Error: FPU signals one of its exceptions, e.g. divide by zero, overflow, and underflow) D. Exceptions caused by executions of special instructions: • Syscall: A Syscall instruction executed; • Break: A Break instruction executed; • Trap: A condition tested by a trap instruction is true; 33 MIPS Exception Processing When any of the exceptions previously listed occur, the MIPS processor processes the exception in the following 3 steps: Step 1. • EPC register gets a value equal to either: – address of a faulty instruction if the instruction itself caused exception (e.g. address error, reserved instruction) or detected hardware malfunctioning (e.g. bus error), – address of the next instructions which would have been executed, in all other cases. Additionally, in the case of the address error, BadVAddr register gets value of the invalid address. g. babic Presentation B 34 MIPS Exception Processing (continued) Step 2. (Simplified) • PC 8000018016 – next instruction executed is at the location 8000018016 • Cause register a code of the exception – Each exception has its code, e.g.: • hardware interrupt = 0 • illegal memory address (load/fatch or store) = 4 or 5 • bus error (fetch or load/store)= 6 or 7 • syscall instruction execution = 8 • illegal op-code, i.e. reserved or undefined op-code= 10 • integer overflow = 12 • Floating point exception = 15 Step 3. • Processor is now in Kernel mode, i.e. CPU mode bit 1; g. babic Presentation B 35 Dual-Mode of CPU Operation • CPU mode bit added to computer hardware to indicate the current CPU mode: 1 (=kernel) or 0 (=user). • When an exception or interrupt or fault occurs CPU hardware switches to the kernel mode. Exception/Interrupt/Fault kernel user set user mode Privileged instructions can be executed only in kernel mode. g. babic Presentation B 36 • Problem: OS loads the exception handling routine at the address 8100 000816. What else should be done so this routine is activated each time an exception happens? Your solution should include instructions. • Answer: Memory location 8000018016 should contain instruction j 40000216 i.e. mem location 80000180 000010 00 0100 0000 0000 0000 0000 0010 j 0 4 0 0 0 0 2 • Effect of j instruction: PC [PC31..28] || [I25..0] || 02 • PC 1000 0001 0000 0000 0000 0000 0000 1000 8 1 0 0 0 0 0 8 g. babic Presentation B 37 Comments: -sll instruction is noop instruction -Add srav, srlv, sllv - mention two branch and link instructions - consider adding few fp instructions. g. babic Presentation B 38