--- ../../../cs340/spring01/prog4/mips.h Wed Mar 28 21:12:32 2001 +++ mips.h Thu Mar 29 16:06:41 2001 @@ -1,3 +1,14 @@ +/* Set __BYTE_ORDER. */ +#include +#ifndef __BYTE_ORDER +#define LITTLE_ENDIAN 1234 +#ifdef _BIG_ENDIAN +#define __BYTE_ORDER 4321 +#else +#define __BYTE_ORDER 1234 +#endif +#endif + //--------------------------------------------------------------- // CLASS 0 //--------------------------------------------------------------- @@ -19,9 +30,15 @@ // Instructions: mfhi, mflo // Pattern: 000000 & 00000 & 00000 & rd & 00000 & 010000 & mfhi typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:16; unsigned int rd:5; unsigned int bitsB:11; +#else + unsigned int bitsA:11; + unsigned int rd:5; + unsigned int bitsB:16; +#endif } CLASS1; // 000000 00000 00000 rd 00000 010000 mfhi @@ -42,9 +59,15 @@ // Instructions: mthi, mtlo, jr // Pattern: 000000 & rs & 00000 & 00000 & 00000 & 010001 & mthi typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int bitsB:21; +#else + unsigned int bitsA:21; + unsigned int rs:5; + unsigned int bitsB:6; +#endif } CLASS2; // 000000 rs 00000 00000 00000 010001 mthi @@ -71,10 +94,17 @@ // Pattern: 000000 & rs & rt & 00000 & 00000 & 011000 & mult // Instructions: mult, multu, div, divu typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; unsigned int bitsB:16; +#else + unsigned int bitsA:16; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsB:6; +#endif } CLASS3; // 000000 rs rt 00000 00000 011000 mult @@ -107,11 +137,19 @@ // Instructions: jalr // Pattern: 000000 & rs & 00000 & rd & 00000 & 001001 & jalr typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int bitsB:5; unsigned int rd:5; unsigned int bitsC:11; +#else + unsigned int bitA:11; + unsigned int rd:5; + unsigned int bitB:5; + unsigned int rs:5; + unsigned int bitC:6; +#endif } CLASS4; // 000000 rs 00000 rd 00000 001001 jalr @@ -126,11 +164,19 @@ // Instructions: sllv, srlv, srav, add, addu, sub, subu, and, or, xor, nor, slt, sltu // Pattern: 000000 & rs & rt & rd & 00000 & 000100 & sllv typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; unsigned int rd:5; unsigned int bitsB:11; +#else + unsigned int bitsA:11; + unsigned int rd:5; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsB:11; +#endif } CLASS5; // 000000 rs rt rd 00000 000100 sllv @@ -217,11 +263,19 @@ // Pattern: 000000 & 00000 & rt & rd & imm5 & 000000 & sll // Instructions: sll, srl, sra typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:11; unsigned int rt:5; unsigned int rd:5; unsigned int imm5:5; unsigned int bitsB:6; +#else + unsigned int bitsA:6; + unsigned int imm5:5; + unsigned int rd:5; + unsigned int rt:5; + unsigned int bitsB:6; +#endif } CLASS6; // 000000 00000 rt rd imm5 000000 sll @@ -248,12 +302,20 @@ // Instructions: bltz, bgez, bltzal, bgezal, blez, bgtz // Pattern: 000001 & rs & 00000 & imm16 & bltz typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int bitsB:5; int imm16:16; +#else + int imm16:16; + unsigned int bitsA:5; + unsigned int rs:5; + unsigned int bitsB:6; +#endif } CLASS7; + // 000001 rs 00000 imm16 bltz #define bltz_MASK 0xfc1f0000 #define bltz_VALUE 0x4000000 @@ -296,10 +358,17 @@ // Pattern: 000100 & rs & rt & imm16 & addi // Instructions: addi, slti, andi, ori, xori typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; int imm16:16; +#else + int imm16:16; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsA:6; +#endif } CLASS8; // 001000 rs rt imm16 addi @@ -338,10 +407,17 @@ // Instructions: addiu, sltiu // Pattern: 001001 & rs & rt & imm16 & addiu typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; unsigned int imm16:16; +#else + unsigned int imm16:16; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsA:6; +#endif } CLASS9; // 001001 rs rt imm16 addiu @@ -362,8 +438,13 @@ // Instructions: j, jal // Pattern: 000010 & imm26 & j typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int imm26:26; +#else + unsigned int imm26:26; + unsigned int bitsA:6; +#endif } CLASS10; // 000010 imm26 j @@ -401,10 +482,17 @@ // Instructions: lb, lh, lwl, lw, lbu, lhu, lwr, sb, sh, swl, sw, swr // Pattern: 101011 & rs & rt & imm16 & sw typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; int imm16:16; +#else + int imm16:16; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsA:6; +#endif } CLASS12; // 100000 rs rt imm16 lb @@ -485,10 +573,17 @@ // Instructions: beq, bne // Pattern: 000100 & rs & rt & imm16 & beq typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:6; unsigned int rs:5; unsigned int rt:5; int imm16:16; +#else + int imm16:16; + unsigned int rt:5; + unsigned int rs:5; + unsigned int bitsA:6; +#endif } CLASS13; // 000100 rs rt imm16 beq @@ -509,9 +604,15 @@ // Instructions: lui // 00111100000 rt imm16 lui typedef struct { +#if (__BYTE_ORDER != LITTLE_ENDIAN) unsigned int bitsA:11; unsigned int rt:5; int imm16:16; +#else + int imm16:16; + unsigned int rt:5; + unsigned int bitsA:11; +#endif } CLASS14; // 00111100000 rt imm16 lui