|
|
DataMuseum.dkPresents historical artifacts from the history of: RC9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: @ T i
Length: 9281 (0x2441)
Types: TextFile
Notes: @(#)inst.h 13.1 (RC Computer) 91/02/02 */
Names: »inst.h«
└─⟦50656ff4a⟧ Bits:30010538 TX 3.1 Coldstart
└─⟦bbf173f5c⟧ »0004«
└─⟦this⟧ »./usr/include/rc/inst.h«
/* @(#)inst.h 13.1 (RC Computer) 91/02/02 */
/* --------------------------------------------------- */
/* | Copyright (c) 1986 MIPS Computer Systems, Inc. | */
/* | All Rights Reserved. | */
/* --------------------------------------------------- */
/* $Header: inst.h,v 1.13.1.1 89/01/21 07:58:08 wje Exp $ */
#ifndef _SYS_INST_
#define _SYS_INST_ 1
/*
* inst.h -- instruction format defines
*/
#ifdef LANGUAGE_C
#ifdef MIPSEB
union mips_instruction {
unsigned word;
unsigned char byte[4];
struct {
unsigned opcode : 6;
unsigned target : 26;
} j_format;
struct {
unsigned opcode : 6;
unsigned rs : 5;
unsigned rt : 5;
signed simmediate : 16;
} i_format;
struct {
unsigned opcode : 6;
unsigned rs : 5;
unsigned rt : 5;
unsigned uimmediate : 16;
} u_format;
struct {
unsigned opcode : 6;
unsigned rs : 5;
unsigned rt : 5;
unsigned rd : 5;
unsigned re : 5;
unsigned func : 6;
} r_format;
struct {
unsigned opcode : 6;
unsigned : 1;
unsigned fmt : 4;
unsigned rt : 5;
unsigned rd : 5;
unsigned re : 5;
unsigned func : 6;
} f_format;
};
#endif
#ifdef MIPSEL
union mips_instruction {
unsigned word;
unsigned char byte[4];
struct {
unsigned target : 26;
unsigned opcode : 6;
} j_format;
struct {
signed simmediate : 16;
unsigned rt : 5;
unsigned rs : 5;
unsigned opcode : 6;
} i_format;
struct {
unsigned uimmediate : 16;
unsigned rt : 5;
unsigned rs : 5;
unsigned opcode : 6;
} u_format;
struct {
unsigned func : 6;
unsigned re : 5;
unsigned rd : 5;
unsigned rt : 5;
unsigned rs : 5;
unsigned opcode : 6;
} r_format;
struct {
unsigned func : 6;
unsigned re : 5;
unsigned rd : 5;
unsigned rt : 5;
unsigned fmt : 4;
unsigned : 1;
unsigned opcode : 6;
} f_format;
};
#endif
/* major opcodes */
#define spec_op 0x00
#define bcond_op 0x01
#define j_op 0x02
#define jal_op 0x03
#define beq_op 0x04
#define bne_op 0x05
#define blez_op 0x06
#define bgtz_op 0x07
#define addi_op 0x08
#define addiu_op 0x09
#define slti_op 0x0A
#define sltiu_op 0x0B
#define andi_op 0x0C
#define ori_op 0x0D
#define xori_op 0x0E
#define lui_op 0x0F
#define cop0_op 0x10
#define cop1_op 0x11
#define cop2_op 0x12
#define cop3_op 0x13
#define beql_op 0x14
#define bnel_op 0x15
#define blezl_op 0x16
#define bgtzl_op 0x17
#define lb_op 0x20
#define lh_op 0x21
#define lwl_op 0x22
/* #define lcache_op 0x22 */
#define lw_op 0x23
#define lbu_op 0x24
#define lhu_op 0x25
#define lwr_op 0x26
/* #define flush_op 0x26 */
#define ld_op 0x27
#define sb_op 0x28
#define sh_op 0x29
#define swl_op 0x2A
/* #define scache_op 0x2A */
#define sw_op 0x2B
#define swr_op 0x2E
/* #define inval_op 0x2E */
#define sd_op 0x2F
#define ll_op 0x30
#define lwc1_op 0x31
#define lwc2_op 0x32
#define lwc3_op 0x33
#define ldc1_op 0x35
#define ldc2_op 0x36
#define ldc3_op 0x37
#define sc_op 0x38
#define swc1_op 0x39
#define swc2_op 0x3A
#define swc3_op 0x3B
#define sdc1_op 0x3D
#define sdc2_op 0x3E
#define sdc3_op 0x3F
/* func field of spec opcode */
#define sll_op 0x00
#define srl_op 0x02
#define sra_op 0x03
#define sllv_op 0x04
#define srlv_op 0x06
#define srav_op 0x07
#define jr_op 0x08
#define jalr_op 0x09
#define syscall_op 0x0C
#define break_op 0x0D
#define spim_op 0x0E
#define mfhi_op 0x10
#define mthi_op 0x11
#define mflo_op 0x12
#define mtlo_op 0x13
#define mult_op 0x18
#define multu_op 0x19
#define div_op 0x1A
#define divu_op 0x1B
#define add_op 0x20
#define addu_op 0x21
#define sub_op 0x22
#define subu_op 0x23
#define and_op 0x24
#define or_op 0x25
#define xor_op 0x26
#define nor_op 0x27
#define slt_op 0x2A
#define sltu_op 0x2B
#define tge_op 0x30
#define tgeu_op 0x31
#define tlt_op 0x32
#define tltu_op 0x33
#define teq_op 0x34
#define tne_op 0x36
/* rt field of bcond opcodes */
#define bltz_op 0x00
#define bgez_op 0x01
#define bltzl_op 0x02
#define bgezl_op 0x03
#define spimi_op 0x04
#define tgei_op 0x08
#define tgeiu_op 0x09
#define tlti_op 0x0A
#define tltiu_op 0x0B
#define teqi_op 0x0C
#define tnei_op 0x0E
#define bltzal_op 0x10
#define bgezal_op 0x11
#define bltzall_op 0x12
#define bgezall_op 0x13
/* rs field of cop opcodes */
#define bc_op 0x08
#define mfc_op 0x00
#define cfc_op 0x02
#define mtc_op 0x04
#define ctc_op 0x06
#define cop_op 0x10
/* func field of cop0/op opcodes */
#define tlbr_op 0x1
#define tlbwi_op 0x2
#define tlbwr_op 0x6
#define tlbp_op 0x8
#define rfe_op 0x10
/* rs field of cop1 opcode */
#define s_fmt 0
#define d_fmt 1
#define e_fmt 2
#define w_fmt 4
/* func field of cop1/{s,d,w} opcodes */
#define fadd_op 0x00
#define fsub_op 0x01
#define fmul_op 0x02
#define fdiv_op 0x03
#define fsqrt_op 0x04
#define fabs_op 0x05
#define fmov_op 0x06
#define fneg_op 0x07
#define fround_op 0x0c
#define ftrunc_op 0x0d
#define fceil_op 0x0e
#define ffloor_op 0x0f
#define fcvts_op 0x20
#define fcvtd_op 0x21
#define fcvte_op 0x22
#define fcvtw_op 0x24
#define fcmp_op 0x30
/* compatability entries with past inst.h's */
#define lwc0_op 0x30
#define ldc0_op 0x34
#define swc0_op 0x38
#define sdc0_op 0x3C
#define vcall_op 0x0E
#define fmpy_op 0x02
#endif /* LANGUAGE_C */
#ifdef LANGUAGE_PASCAL
#ifdef MIPSEB
type
mips_instruction =
packed record
case cardinal of
0: (
word: cardinal;
);
1: (
byte: packed array[0..3] of 0..255;
);
2: (
opcode: 0..63;
target: 0..67108863;
);
3: (
opcode3: 0..63;
rs: 0..31;
rt: 0..31;
simmediate: -32768..32767;
);
4: (
opcode4: 0..63;
rs4: 0..63;
rt4: 0..63;
uimmediate: 0..65535;
);
5: (
opcode5: 0..63;
rs5: 0..63;
rt5: 0..63;
rd5: 0..63;
re5: 0..63;
func: 0..63;
);
end {record};
#endif
#ifdef MIPSEL
type
mips_instruction =
packed record
case cardinal of
0: (
word: cardinal;
);
1: (
byte: packed array[0..3] of 0..255;
);
2: (
target: 0..67108863;
opcode: 0..63;
);
3: (
simmediate: -32768..32767;
rt: 0..31;
rs: 0..31;
opcode3: 0..63;
);
4: (
uimmediate: 0..65535;
rt4: 0..63;
rs4: 0..63;
opcode4: 0..63;
);
5: (
func: 0..63;
re5: 0..63;
rd5: 0..63;
rt5: 0..63;
rs5: 0..63;
opcode5: 0..63;
);
end {record};
#endif
const
/* major opcodes */
spec_op = 16#00;
bcond_op = 16#01;
j_op = 16#02;
jal_op = 16#03;
beq_op = 16#04;
bne_op = 16#05;
blez_op = 16#06;
bgtz_op = 16#07;
addi_op = 16#08;
addiu_op = 16#09;
slti_op = 16#0A;
sltiu_op = 16#0B;
andi_op = 16#0C;
ori_op = 16#0D;
xori_op = 16#0E;
lui_op = 16#0F;
cop0_op = 16#10;
cop1_op = 16#11;
cop2_op = 16#12;
cop3_op = 16#13;
beql_op = 16#14;
bnel_op = 16#15;
blezl_op = 16#16;
bgtzl_op = 16#17;
lb_op = 16#20;
lh_op = 16#21;
lwl_op = 16#22;
lw_op = 16#23;
lbu_op = 16#24;
lhu_op = 16#25;
lwr_op = 16#26;
ld_op = 16#27;
sb_op = 16#28;
sh_op = 16#29;
swl_op = 16#2A;
sw_op = 16#2B;
ll_op = 16#2C;
sc_op = 16#2D;
swr_op = 16#2E;
sd_op = 16#2F;
lwc0_op = 16#30;
lwc1_op = 16#31;
lwc2_op = 16#32;
lwc3_op = 16#33;
ldc0_op = 16#34;
ldc1_op = 16#35;
ldc2_op = 16#36;
ldc3_op = 16#37;
swc0_op = 16#38;
swc1_op = 16#39;
swc2_op = 16#3A;
swc3_op = 16#3B;
sdc0_op = 16#3C;
sdc1_op = 16#3D;
sdc2_op = 16#3E;
sdc3_op = 16#3F;
/* func field of spec opcode */
sll_op = 16#00;
srl_op = 16#02;
sra_op = 16#03;
sllv_op = 16#04;
srlv_op = 16#06;
srav_op = 16#07;
jr_op = 16#08;
jalr_op = 16#09;
syscall_op = 16#0C;
break_op = 16#0D;
spim_op = 16#0E;
mfhi_op = 16#10;
mthi_op = 16#11;
mflo_op = 16#12;
mtlo_op = 16#13;
mult_op = 16#18;
multu_op = 16#19;
div_op = 16#1A;
divu_op = 16#1B;
add_op = 16#20;
addu_op = 16#21;
sub_op = 16#22;
subu_op = 16#23;
and_op = 16#24;
or_op = 16#25;
xor_op = 16#26;
nor_op = 16#27;
slt_op = 16#2A;
sltu_op = 16#2B;
tge_op = 16#30;
tgeu_op = 16#31;
tlt_op = 16#32;
tltu_op = 16#33;
teq_op = 16#34;
tne_op = 16#36;
/* rt field of bcond opcodes */
bltz_op = 16#00;
bgez_op = 16#01;
bltzl_op = 16#02;
bgezl_op = 16#03;
spimi_op = 16#04;
tgei_op = 16#08;
tgeiu_op = 16#09;
tlti_op = 16#0A;
tltiu_op = 16#0B;
teqi_op = 16#0C;
tnei_op = 16#0E;
bltzal_op = 16#10;
bgezal_op = 16#11;
bltzall_op = 16#12;
bgezall_op = 16#13;
/* rs field of cop opcodes */
bc_op = 16#08;
mfc_op = 16#00;
cfc_op = 16#02;
mtc_op = 16#04;
ctc_op = 16#06;
/* func field of cop0/op opcodes */
tlbr_op = 16#1;
tlbwi_op = 16#2;
tlbwr_op = 16#6;
tlbp_op = 16#8;
rfe_op = 16#10;
/* rs field of cop1 opcode */
s_fmt = 0;
d_fmt = 1;
e_fmt = 2;
w_fmt = 4;
/* func field of cop1/{s,d,w} opcodes */
fadd_op = 16#00;
fsub_op = 16#01;
fmul_op = 16#02;
fdiv_op = 16#03;
fsqrt_op = 16#04;
fabs_op = 16#05;
fmov_op = 16#06;
fneg_op = 16#07;
fcvts_op = 16#20;
fcvtd_op = 16#21;
fcvte_op = 16#22;
fcvtw_op = 16#24;
fcmp_op = 16#30;
#endif /* LANGUAGE_PASCAL */
#endif _SYS_INST_