mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-10 06:58:29 +08:00
Merge remote-tracking branch 'origin/GP-6501_ghidorahrex_mips32_save_restore--SQUASHED' into patch
This commit is contained in:
@@ -502,6 +502,10 @@ define token instr(32)
|
||||
prime = (26,31)
|
||||
bit25 = (25,25)
|
||||
zero2425 = (24,25)
|
||||
svrs_xreg = (23,25)
|
||||
svrs_xregb0 = (23,23)
|
||||
svrs_xregb1 = (24,24)
|
||||
svrs_xregb2 = (25,25)
|
||||
zero2325 = (23,25)
|
||||
zero1 = (22,25)
|
||||
rs32 = (21,25)
|
||||
@@ -530,6 +534,7 @@ define token instr(32)
|
||||
off21 = (0,20) signed # 21 bit signed offset in conditional branch/link
|
||||
off16 = (0,15) signed # 16 bit signed offset in conditional branch/link
|
||||
bit21 = (21,21)
|
||||
svrs_frame_hi = (19,22)
|
||||
bitz19 = (19,20)
|
||||
pcrel = (19,20)
|
||||
pcrel2 = (18,20)
|
||||
@@ -557,8 +562,16 @@ define token instr(32)
|
||||
lohiacx = (16,19)
|
||||
nd = (17,17)
|
||||
tf = (16,16)
|
||||
svrs_aregb3 = (18,18)
|
||||
svrs_aregb2 = (17,17)
|
||||
svrs_aregb1 = (16,16)
|
||||
svrs_aregb0 = (15,15)
|
||||
svrs_areg = (15,18)
|
||||
|
||||
zero1320 = (13,20)
|
||||
zero1315 = (13,15)
|
||||
save = (13,13)
|
||||
svrs_ra = (12,12)
|
||||
szero = (11,25)
|
||||
mask = (11,20)
|
||||
baser6 = (11,15)
|
||||
@@ -600,7 +613,9 @@ define token instr(32)
|
||||
ac = (11,12)
|
||||
bp = (11,12)
|
||||
bit10 = (10,10)
|
||||
svrs_s0 = (10,10)
|
||||
spec2 = (9,10)
|
||||
svrs_s1 = (9,9)
|
||||
spec3 = (8,10)
|
||||
simmed9 = (7,15)
|
||||
zero2 = (7,10)
|
||||
@@ -613,7 +628,7 @@ define token instr(32)
|
||||
fct2 = (6,10)
|
||||
zero5 = (6,10)
|
||||
wsbh = (6,10)
|
||||
|
||||
svrs_frame_low = (6,9)
|
||||
bp3 = (6,8)
|
||||
sel_0608 = (6,8)
|
||||
sa2 = (6,7)
|
||||
|
||||
@@ -12,6 +12,14 @@
|
||||
|
||||
define token m16instr (16)
|
||||
m16_op=(11,15)
|
||||
m16_rd0_0 = (11,15)
|
||||
m16_rd0_1 = (11,15)
|
||||
m16_rd0_2 = (11,15)
|
||||
m16_rd0_3 = (11,15)
|
||||
m16_rd0_4 = (11,15)
|
||||
m16_rd0_5 = (11,15)
|
||||
m16_rd0_6 = (11,15)
|
||||
m16_rd0_7 = (11,15)
|
||||
m16_i_imm=(0,4)
|
||||
m16_rx=(8,10)
|
||||
m16_rxa=(8,10)
|
||||
@@ -74,6 +82,95 @@ attach variables [ ext_m16r32 m16_i8_r32 ] [
|
||||
t8 t9 k0 k1 gp sp s8 ra
|
||||
];
|
||||
|
||||
|
||||
attach variables [ m16_rd0_0 ] [
|
||||
Index Random EntryLo0 EntryLo1
|
||||
Context PageMask Wired HWREna
|
||||
BadVAddr Count EntryHi Compare
|
||||
Status Cause EPC PRId
|
||||
Config LLAddr WatchLo WatchHi
|
||||
XContext cop0_reg21 cop0_reg22 Debug
|
||||
DEPC PerfCnt ErrCtl CacheErr
|
||||
TagLo TagHi ErrorEPC DESAVE
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_1 ] [
|
||||
MVPControl VPEControl TCStatus cop0_reg3.1
|
||||
ContextConfig PageGrain SRSConf0 cop0_reg7.1
|
||||
cop0_reg8.1 cop0_reg9.1 cop0_reg10.1 cop0_reg11.1
|
||||
IntCtl cop0_reg13.1 cop0_reg14.1 EBase
|
||||
Config1 cop0_reg17.1 WatchLo.1 WatchHi.1
|
||||
cop0_reg20.1 cop0_reg21.1 cop0_reg22.1 TraceControl
|
||||
cop0_reg24.1 PerfCnt.1 cop0_reg26.1 CacheErr.1
|
||||
DataLo.1 DataHi.1 cop0_reg30.1 cop0_reg31.1
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_2 ] [
|
||||
MVPConf0 VPEConf0 TCBind cop0_reg3.2
|
||||
cop0_reg4.2 cop0_reg5.2 SRSConf1 cop0_reg7.2
|
||||
cop0_reg8.2 cop0_reg9.2 cop0_reg10.2 cop0_reg11.2
|
||||
SRSCtl cop0_reg13.2 cop0_reg14.2 cop0_reg15.2
|
||||
Config2 cop0_reg17.2 WatchLo.2 WatchHi.2
|
||||
cop0_reg20.2 cop0_reg21.2 cop0_reg22.2 TraceControl2
|
||||
cop0_reg24.2 PerfCnt.2 cop0_reg26.2 CacheErr.2
|
||||
TagLo.2 TagHi.2 cop0_reg30.2 cop0_reg31.2
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_3 ] [
|
||||
MVPConf1 VPEConf1 TCRestart cop0_reg3.3
|
||||
cop0_reg4.3 cop0_reg5.3 SRSConf2 cop0_reg7.3
|
||||
cop0_reg8.3 cop0_reg9.3 cop0_reg10.3 cop0_reg11.3
|
||||
SRSMap cop0_reg13.3 cop0_reg14.3 cop0_reg15.3
|
||||
Config3 cop0_reg17.3 WatchLo.3 WatchHi.3
|
||||
cop0_reg20.3 cop0_reg21.3 cop0_reg22.3 UserTraceData
|
||||
cop0_reg24.3 PerfCnt.3 cop0_reg26.3 CacheErr.3
|
||||
DataLo.3 DataHi.3 cop0_reg30.3 cop0_reg31.3
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_4 ] [
|
||||
cop0_reg0.4 YQMask TCHalt cop0_reg3.4
|
||||
cop0_reg4.4 cop0_reg5.4 SRSConf3 cop0_reg7.4
|
||||
cop0_reg8.4 cop0_reg9.4 cop0_reg10.4 cop0_reg11.4
|
||||
cop0_reg12.4 cop0_reg13.4 cop0_reg14.4 cop0_reg15.4
|
||||
cop0_reg16.4 cop0_reg17.4 WatchLo.4 WatchHi.4
|
||||
cop0_reg20.4 cop0_reg21.4 cop0_reg22.4 TraceBPC
|
||||
cop0_reg24.4 PerfCnt.4 cop0_reg26.4 CacheErr.4
|
||||
TagLo.4 TagHi.4 cop0_reg30.4 cop0_reg31.4
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_5 ] [
|
||||
cop0_reg0.5 VPESchedule TCContext cop0_reg3.5
|
||||
cop0_reg4.5 cop0_reg5.5 SRSConf4 cop0_reg7.5
|
||||
cop0_reg8.5 cop0_reg9.5 cop0_reg10.5 cop0_reg11.5
|
||||
cop0_reg12.5 cop0_reg13.5 cop0_reg14.5 cop0_reg15.5
|
||||
cop0_reg16.5 cop0_reg17.5 WatchLo.5 WatchHi.5
|
||||
cop0_reg20.5 cop0_reg21.5 cop0_reg22.5 cop0_reg23.5
|
||||
cop0_reg24.5 PerfCnt.5 cop0_reg26.5 CacheErr.5
|
||||
DataLo.5 DataHi.5 cop0_reg30.5 cop0_reg31.5
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_6 ] [
|
||||
cop0_reg0.6 VPEScheFBack TCSchedule cop0_reg3.6
|
||||
cop0_reg4.6 cop0_reg5.6 cop0_reg6.6 cop0_reg7.6
|
||||
cop0_reg8.6 cop0_reg9.6 cop0_reg10.6 cop0_reg11.6
|
||||
cop0_reg12.6 cop0_reg13.6 cop0_reg14.6 cop0_reg15.6
|
||||
cop0_reg16.6 cop0_reg17.6 WatchLo.6 WatchHi.6
|
||||
cop0_reg20.6 cop0_reg21.6 cop0_reg22.6 cop0_reg23.6
|
||||
cop0_reg24.6 PerfCnt.6 cop0_reg26.6 CacheErr.6
|
||||
TagLo.6 TagHi.6 cop0_reg30.6 cop0_reg31.6
|
||||
];
|
||||
|
||||
attach variables [ m16_rd0_7 ] [
|
||||
cop0_reg0.7 VPEOpt TCScheFBack cop0_reg3.7
|
||||
cop0_reg4.7 cop0_reg5.7 cop0_reg6.7 cop0_reg7.7
|
||||
cop0_reg8.7 cop0_reg9.7 cop0_reg10.7 cop0_reg11.7
|
||||
cop0_reg12.7 cop0_reg13.7 cop0_reg14.7 cop0_reg15.7
|
||||
cop0_reg16.7 cop0_reg17.7 WatchLo.7 WatchHi.7
|
||||
cop0_reg20.7 cop0_reg21.7 cop0_reg22.7 cop0_reg23.7
|
||||
cop0_reg24.7 PerfCnt.7 cop0_reg26.7 CacheErr.7
|
||||
DataLo.7 DataHi.7 cop0_reg30.7 cop0_reg31.7
|
||||
];
|
||||
|
||||
@ifdef MIPS64
|
||||
attach variables [ m16_rxa m16_rya m16_rza m16_mv_rza]
|
||||
[ s0_lo s1_lo v0_lo v1_lo a0_lo a1_lo a2_lo a3_lo ];
|
||||
@@ -87,6 +184,7 @@ attach variables [ ext_m16r32a m16_i8_r32a ] [
|
||||
|
||||
RZ: m16_rz is m16_rz { export m16_rz; }
|
||||
|
||||
|
||||
@else # !MIPS64
|
||||
attach variables [ m16_rxa m16_rya m16_rza m16_mv_rza ]
|
||||
[ s0 s1 v0 v1 a0 a1 a2 a3 ];
|
||||
@@ -912,11 +1010,21 @@ E2_REGOFF: imm is ext_imm_2124 & m16_i_imm [ imm = m16_i_imm | (ext_imm_2124 <<
|
||||
m16_rx = sext( valOrig | valLoad );
|
||||
}
|
||||
|
||||
:mfc0 m16_ry, m16_i_imm, ext_imm_2123 is ISA_MODE=1 & RELP=1 & ext_isjal=0 & ext_is_ext=1 & ext_imm_2426=0 & ext_imm_2123 & ext_imm_1620=0 & m16_op=0b01100 & m16_rx=0b111 & m16_ry & m16_i_imm {
|
||||
m16_ry = getCopReg(0:1,m16_i_imm:1,ext_imm_2123:1);
|
||||
|
||||
m16_RD0: m16_rd0_0 is m16_rd0_0 & ext_imm_2123=0 { export m16_rd0_0; }
|
||||
m16_RD0: m16_rd0_1 is m16_rd0_1 & ext_imm_2123=1 { export m16_rd0_1; }
|
||||
m16_RD0: m16_rd0_2 is m16_rd0_2 & ext_imm_2123=2 { export m16_rd0_2; }
|
||||
m16_RD0: m16_rd0_3 is m16_rd0_3 & ext_imm_2123=3 { export m16_rd0_3; }
|
||||
m16_RD0: m16_rd0_4 is m16_rd0_4 & ext_imm_2123=4 { export m16_rd0_4; }
|
||||
m16_RD0: m16_rd0_5 is m16_rd0_5 & ext_imm_2123=5 { export m16_rd0_5; }
|
||||
m16_RD0: m16_rd0_6 is m16_rd0_6 & ext_imm_2123=6 { export m16_rd0_6; }
|
||||
m16_RD0: m16_rd0_7 is m16_rd0_7 & ext_imm_2123=7 { export m16_rd0_7; }
|
||||
|
||||
:mfc0 m16_ry, m16_RD0 is ISA_MODE=1 & RELP=1 & ext_isjal=0 & ext_is_ext=1 & ext_imm_2426=0 & ext_imm_2123 & ext_imm_1620=0 & m16_op=0b01100 & m16_rx=0b111 & m16_ry & m16_RD0 {
|
||||
m16_ry = zext( m16_RD0:$(SIZETO4) );
|
||||
}
|
||||
:mtc0 m16_ry, m16_i_imm, ext_imm_2123 is ISA_MODE=1 & RELP=1 & ext_isjal=0 & ext_is_ext=1 & ext_imm_2426=0 & ext_imm_2123 & ext_imm_1620=1 & m16_op=0b01100 & m16_rx=0b111 & m16_ry & m16_i_imm {
|
||||
setCopReg(0:1,m16_ry,m16_i_imm:1,ext_imm_2123:1);
|
||||
:mtc0 m16_ry, m16_RD0 is ISA_MODE=1 & RELP=1 & ext_isjal=0 & ext_is_ext=1 & ext_imm_2426=0 & ext_imm_2123 & ext_imm_1620=1 & m16_op=0b01100 & m16_rx=0b111 & m16_ry & m16_RD0 {
|
||||
setCopReg(0:1, m16_RD0, m16_ry);
|
||||
}
|
||||
|
||||
:movz m16_rx, m16_ry, ext_rb is ISA_MODE=1 & RELP=1 & ext_isjal=0 & ext_is_ext=1 & ext_imm_2226=0 & ext_imm_21=1 & ext_imm_1920=0 & ext_rb & m16_op=0b00110 & m16_rx & m16_ry & m16_shft_sa=1 & m16_shft_f=0b10 {
|
||||
|
||||
@@ -191,11 +191,13 @@ define pcodeop special2;
|
||||
|
||||
# 0100 0010 0000 0000 0000 0000 0001 1000
|
||||
:eret is $(AMODE) & prime=0x10 & fct=0x18 & bit25=1 & copfill=0 {
|
||||
return[EPC];
|
||||
JXWritePC(EPC);
|
||||
return[EPC];
|
||||
}
|
||||
|
||||
:eretnc is $(AMODE) & prime=0x10 & fct=0x18 & bit25=1 & copfill=1 {
|
||||
return[EPC];
|
||||
JXWritePC(EPC);
|
||||
return[EPC];
|
||||
}
|
||||
|
||||
# 0111 11ss ssst tttt mmmm mLLL LL00 0000
|
||||
@@ -423,13 +425,13 @@ define pcodeop special2;
|
||||
|
||||
# 0100 1000 000t tttt iiii iiii iiii iiii
|
||||
:mfc2 RT, immed is $(AMODE) & prime=0x12 & copop=0 & RT & immed {
|
||||
tmp:$(REGSIZE) = getCopReg(2:1, immed:4);
|
||||
tmp:4 = getCopReg(2:1, immed:4);
|
||||
RT = sext( tmp );
|
||||
}
|
||||
|
||||
# 0100 1000 011t tttt iiii iiii iiii iiii
|
||||
:mfhc2 RT, immed is $(AMODE) & prime=0x12 & copop=3 & RT & fs & immed {
|
||||
tmp:$(REGSIZE) = getCopReg(2:1, immed:4);
|
||||
tmp:4 = getCopReg(2:1, immed:4);
|
||||
RT = sext(tmp >> 32);
|
||||
}
|
||||
|
||||
@@ -450,16 +452,20 @@ define pcodeop special2;
|
||||
}
|
||||
|
||||
# 0100 0000 100t tttt dddd d000 0000 0sss
|
||||
:mtc0 RTsrc, RD0, sel is $(AMODE) & prime=0x10 & copop=4 & RTsrc & RD0 & zero6=0 & sel {
|
||||
setCopReg(0:1, RD0, RTsrc, sel:1);
|
||||
:mtc0 RTsrc, RD0 is $(AMODE) & prime=0x10 & copop=4 & RTsrc & RD0 & zero6=0 {
|
||||
setCopReg(0:1, RD0, RTsrc);
|
||||
}
|
||||
|
||||
# 0100 1000 100t tttt iiii iiii iiii iiii
|
||||
:mtc2 RTsrc, immed is $(AMODE) & prime=0x12 & copop=4 & RTsrc & immed {
|
||||
setCopReg(2:1, immed:4, RTsrc);
|
||||
}
|
||||
|
||||
:mthc0 RTsrc, RD0, sel is $(AMODE) & prime=0x10 & copop=6 & RTsrc & RD0 & zero6=0 & sel {
|
||||
setCopReg(0:1, RD0, RTsrc, sel:1);
|
||||
tmp:4 = RTsrc:$(SIZETO4);
|
||||
low:4 = RD0:4;
|
||||
val:8 = (zext(tmp) << 32) + zext(low);
|
||||
setCopReg(0:1, RD0, val);
|
||||
}
|
||||
|
||||
# 0100 1000 111t tttt iiii iiii iiii iiii
|
||||
@@ -1747,5 +1753,224 @@ define pcodeop SYNC;
|
||||
signalReservedInstruction(immed:2);
|
||||
}
|
||||
|
||||
rsRa: is svrs_ra=0 {}
|
||||
rsRa: ra is svrs_ra=1 & ra {
|
||||
tsp = tsp-$(REGSIZE);
|
||||
MemSrcCast(ra,tsp);
|
||||
}
|
||||
|
||||
svRa: is svrs_ra=0 {}
|
||||
svRa: ra is svrs_ra=1 & ra {
|
||||
tsp = tsp-$(REGSIZE);
|
||||
MemDestCast(tsp,ra);
|
||||
}
|
||||
|
||||
rs_statReg: is svrs_areg {}
|
||||
rs_statReg: ",a3" is (svrs_areg=1 | svrs_areg=5 | svrs_areg=9 |svrs_areg=0xd) {
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a3,tsp);
|
||||
}
|
||||
rs_statReg: ",a2-a3" is (svrs_areg=2 | svrs_areg=6 | svrs_areg=0xa) {
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a3,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a2,tsp);
|
||||
}
|
||||
rs_statReg: ",a1-a3" is (svrs_areg=3 | svrs_areg=7) {
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a3,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a2,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a1,tsp);
|
||||
}
|
||||
rs_statReg: ",a0-a3" is svrs_areg=0xb {
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a3,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a2,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a1,tsp);
|
||||
tsp = tsp-4;
|
||||
MemSrcCast(a0,tsp);
|
||||
}
|
||||
|
||||
rsStat: is svrs_areg=0 | svrs_areg=4 | svrs_areg=8 | svrs_areg=0xc | svrs_areg=0xe {}
|
||||
rsStat: rs_statReg is rs_statReg {
|
||||
build rs_statReg;
|
||||
}
|
||||
|
||||
|
||||
sv_statReg: is svrs_areg {}
|
||||
sv_statReg: ",a3" is (svrs_areg=1 | svrs_areg=5 | svrs_areg=9 | svrs_areg=0xd) {
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a3);
|
||||
}
|
||||
sv_statReg: ",a2-a3" is (svrs_areg=2 | svrs_areg=6 | svrs_areg=0xa) {
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a3);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a2);
|
||||
}
|
||||
sv_statReg: ",a1-a3" is (svrs_areg=3 | svrs_areg=7) {
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a3);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a2);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a1);
|
||||
}
|
||||
sv_statReg: ",a0-a3" is svrs_areg=0xb {
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a3);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a2);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a1);
|
||||
tsp = tsp-4;
|
||||
MemDestCast(tsp,a0);
|
||||
}
|
||||
|
||||
svStat: is svrs_areg=0 | svrs_areg=4 | svrs_areg=8 | svrs_areg=0xc | svrs_areg=0xe {}
|
||||
svStat: sv_statReg is sv_statReg {
|
||||
build sv_statReg;
|
||||
}
|
||||
|
||||
sv_areg1: is svrs_aregb2=0 {}
|
||||
sv_areg1: "a0," is svrs_aregb2=1 {
|
||||
ptr:$(REGSIZE) = sp;
|
||||
MemDestCast(ptr,a0);
|
||||
}
|
||||
|
||||
sv_areg2: sv_areg1 is sv_areg1 { build sv_areg1; }
|
||||
sv_areg2: "a0-a1," is svrs_aregb3=1 & svrs_aregb2=0 & (svrs_aregb1=0 | svrs_aregb0=0) {
|
||||
ptr:$(REGSIZE) = sp;
|
||||
MemDestCast(ptr,a0);
|
||||
ptr = sp+4;
|
||||
MemDestCast(ptr,a1);
|
||||
}
|
||||
|
||||
sv_areg3: sv_areg2 is sv_areg2 { build sv_areg2; }
|
||||
sv_areg3: "a0-a2," is svrs_aregb3=1 & svrs_aregb2=1 & svrs_aregb1=0 {
|
||||
ptr:$(REGSIZE) = sp;
|
||||
MemDestCast(ptr,a0);
|
||||
ptr = sp+4;
|
||||
MemDestCast(ptr,a1);
|
||||
ptr = sp+8;
|
||||
MemDestCast(ptr,a2);
|
||||
}
|
||||
|
||||
sv_areg4: sv_areg3 is sv_areg3 { build sv_areg3; }
|
||||
sv_areg4: "a0-a3," is svrs_areg=0xe {
|
||||
ptr:$(REGSIZE) = sp;
|
||||
MemDestCast(ptr,a0);
|
||||
ptr = sp+4;
|
||||
MemDestCast(ptr,a1);
|
||||
ptr = sp+8;
|
||||
MemDestCast(ptr,a2);
|
||||
ptr = sp+12;
|
||||
MemDestCast(ptr,a3);
|
||||
}
|
||||
|
||||
svAregs: is svrs_aregb3=0 | svrs_areg=0xb | svrs_areg=0xf {}
|
||||
svAregs: sv_areg4 is sv_areg4 {
|
||||
build sv_areg4;
|
||||
}
|
||||
|
||||
rs_s0: is svrs_s0 {}
|
||||
rs_s0: is svrs_s0=1 { tsp = tsp-$(REGSIZE); MemSrcCast(s0,tsp); }
|
||||
|
||||
rs_s1: is svrs_s1 {}
|
||||
rs_s1: is svrs_s1=1 { tsp = tsp-$(REGSIZE); MemSrcCast(s1,tsp); }
|
||||
|
||||
rs_s8: is svrs_xreg=6 {}
|
||||
rs_s8: is svrs_xreg { tsp = tsp-$(REGSIZE); MemSrcCast(s8,tsp); }
|
||||
|
||||
rs_s7: is svrs_xreg=5 {}
|
||||
rs_s7: is rs_s8 { build rs_s8; tsp = tsp-$(REGSIZE); MemSrcCast(s7,tsp); }
|
||||
|
||||
rs_s6: is svrs_xreg=4 {}
|
||||
rs_s6: is rs_s7 { build rs_s7; tsp = tsp-$(REGSIZE); MemSrcCast(s6,tsp); }
|
||||
|
||||
rs_s5: is svrs_xreg=3 {}
|
||||
rs_s5: is rs_s6 { build rs_s6; tsp = tsp-$(REGSIZE); MemSrcCast(s5,tsp); }
|
||||
|
||||
rs_s4: is svrs_xreg=2 {}
|
||||
rs_s4: is rs_s5 { build rs_s5; tsp = tsp-$(REGSIZE); MemSrcCast(s4,tsp); }
|
||||
|
||||
rs_s3: is svrs_xreg=1 {}
|
||||
rs_s3: is rs_s4 { build rs_s4; tsp = tsp-$(REGSIZE); MemSrcCast(s3,tsp); }
|
||||
|
||||
rs_s2: is svrs_xreg=0 {}
|
||||
rs_s2: is rs_s3 { build rs_s3; tsp = tsp-$(REGSIZE); MemSrcCast(s2,tsp); }
|
||||
|
||||
rsXsregs: is svrs_s0=0 & svrs_s1=0 & svrs_xreg=0 {}
|
||||
rsXsregs: ","svrs_xreg is svrs_s0 & svrs_s1 & svrs_xreg & rs_s2 & rs_s1 & rs_s0 {
|
||||
build rs_s2;
|
||||
build rs_s1;
|
||||
build rs_s0;
|
||||
}
|
||||
|
||||
sv_s0: is svrs_s0 {}
|
||||
sv_s0: is svrs_s0=1 { tsp = tsp-$(REGSIZE); MemDestCast(tsp,s0);}
|
||||
|
||||
sv_s1: is svrs_s1 {}
|
||||
sv_s1: is svrs_s1=1 { tsp = tsp-$(REGSIZE); MemDestCast(tsp,s1); }
|
||||
|
||||
sv_s8: is svrs_xreg=6 {}
|
||||
sv_s8: is svrs_xreg { tsp = tsp-$(REGSIZE); MemDestCast(tsp,s8); }
|
||||
|
||||
sv_s7: is svrs_xreg=5 {}
|
||||
sv_s7: is sv_s8 { build sv_s8; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s7); }
|
||||
|
||||
sv_s6: is svrs_xreg=4 {}
|
||||
sv_s6: is sv_s7 { build sv_s7; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s6); }
|
||||
|
||||
sv_s5: is svrs_xreg=3 {}
|
||||
sv_s5: is sv_s6 { build sv_s6; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s5); }
|
||||
|
||||
sv_s4: is svrs_xreg=2 {}
|
||||
sv_s4: is sv_s5 { build sv_s5; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s4); }
|
||||
|
||||
sv_s3: is svrs_xreg=1 {}
|
||||
sv_s3: is sv_s4 { build sv_s4; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s3); }
|
||||
|
||||
sv_s2: is svrs_xreg=0 {}
|
||||
sv_s2: is sv_s3 { build sv_s3; tsp = tsp-$(REGSIZE); MemDestCast(tsp,s2); }
|
||||
|
||||
svXsregs: is svrs_s0=0 & svrs_s0=0 & svrs_xreg=0 {}
|
||||
svXsregs: ","svrs_xreg is svrs_s0 & svrs_s1 & svrs_xreg & sv_s0 & sv_s1 & sv_s2 {
|
||||
build sv_s2;
|
||||
build sv_s1;
|
||||
build sv_s0;
|
||||
}
|
||||
|
||||
svFramesize: ,val is svrs_frame_hi=0 & svrs_frame_low=0 [val = 128; ] {export *[const]:2 val;}
|
||||
svFramesize: ,val is svrs_frame_hi & svrs_frame_low [val = ((svrs_frame_hi << 4) | svrs_frame_low) << 3;] {export *[const]:2 val;}
|
||||
|
||||
|
||||
:save svRa^svXsregs^svAregs^svFramesize is $(AMODE) & REL6=1 & prime=0x1c & fct=0x1f & save=0x01 & svRa & svXsregs & svAregs & svStat & svFramesize {
|
||||
tsp = sp;
|
||||
build svAregs;
|
||||
build svRa;
|
||||
build svXsregs;
|
||||
build svStat;
|
||||
build svFramesize;
|
||||
|
||||
tmp:2 = svFramesize;
|
||||
sp = sp - zext(tmp);
|
||||
}
|
||||
|
||||
:restore rsRa^rsXsregs^rsStat^svFramesize is $(AMODE) & REL6=1 & prime=0x1c & fct=0x1f & save=0x00 & rsRa & rsXsregs & rsStat & svFramesize {
|
||||
build svFramesize;
|
||||
|
||||
tmp:2 = svFramesize;
|
||||
tsp = sp+zext(tmp);
|
||||
|
||||
build rsRa;
|
||||
build rsXsregs;
|
||||
build rsStat;
|
||||
|
||||
sp = sp+zext(tmp);
|
||||
}
|
||||
@include "mipsfloat.sinc"
|
||||
|
||||
Reference in New Issue
Block a user