forked from yath/ghidra-xtensa
Experiments with save/restore registers for call8
This commit is contained in:
@@ -4,6 +4,13 @@ define alignment=1;
|
|||||||
define space ram type=ram_space size=4 default;
|
define space ram type=ram_space size=4 default;
|
||||||
define space register type=register_space size=4;
|
define space register type=register_space size=4;
|
||||||
define space special_register type=ram_space size=4;
|
define space special_register type=ram_space size=4;
|
||||||
|
define space save_register type=ram_space size=4;
|
||||||
|
|
||||||
|
# Address registers (AR).
|
||||||
|
define save_register offset=0x0000 size=4 [
|
||||||
|
sa0 sa1 sa2 sa3 sa4 sa5 sa6 sa7 sa8 sa9 sa10 sa11 sa12 sa13 sa14 sa15
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
# Address registers (AR).
|
# Address registers (AR).
|
||||||
define register offset=0x0000 size=4 [
|
define register offset=0x0000 size=4 [
|
||||||
|
@@ -11,6 +11,22 @@ macro popVal(val32) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro save() {
|
||||||
|
sa3 = a3;
|
||||||
|
sa4 = a4;
|
||||||
|
sa5 = a5;
|
||||||
|
sa6 = a6;
|
||||||
|
sa7 = a7;
|
||||||
|
}
|
||||||
|
|
||||||
|
macro restore() {
|
||||||
|
a3 = sa3;
|
||||||
|
a4 = sa4;
|
||||||
|
a5 = sa5;
|
||||||
|
a6 = sa6;
|
||||||
|
a7 = sa7;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
## Windowed Register Option ##
|
## Windowed Register Option ##
|
||||||
|
|
||||||
@@ -28,6 +44,7 @@ macro popVal(val32) {
|
|||||||
# CALL8 - Call PC-relative, Rotate Window by 8, pg. 300.
|
# CALL8 - Call PC-relative, Rotate Window by 8, pg. 300.
|
||||||
:call8 srel_6.23_sb2 is srel_6.23_sb2 & u2_4.5 = 0b10 & op0 = 0b0101 {
|
:call8 srel_6.23_sb2 is srel_6.23_sb2 & u2_4.5 = 0b10 & op0 = 0b0101 {
|
||||||
local dst = srel_6.23_sb2;
|
local dst = srel_6.23_sb2;
|
||||||
|
save();
|
||||||
#s2=a2;
|
#s2=a2;
|
||||||
#s3=a3;
|
#s3=a3;
|
||||||
#s4=a4;
|
#s4=a4;
|
||||||
@@ -42,6 +59,7 @@ macro popVal(val32) {
|
|||||||
a7=a15;
|
a7=a15;
|
||||||
a0 = inst_start + 3;
|
a0 = inst_start + 3;
|
||||||
call [dst];
|
call [dst];
|
||||||
|
restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
# CALL12 - Call PC-relative, Rotate Window by 12, pg. 302.
|
# CALL12 - Call PC-relative, Rotate Window by 12, pg. 302.
|
||||||
|
Reference in New Issue
Block a user