forked from NationalSecurityAgency/ghidra
/
riscv.zcb.sinc
71 lines (58 loc) · 2.17 KB
/
riscv.zcb.sinc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Compressed bit manipulation instructions
# Ref: https://github.com/riscv/riscv-code-size-reduction/releases
cuimm_b: uimm is cop0505 & cop0606 [uimm = (cop0505 << 1) + cop0606;] { local tmp:$(XLEN) = uimm; export tmp; }
# c.lbu Load unsigned byte, 16-bit encoding
:c.lbu cr0204s, cuimm_b(cr0709s) is cop0001=0x0 & cr0204s & cuimm_b & cr0709s & cop1012=0 & cop1315=0x4
{
local ea:$(XLEN) = cr0709s + cuimm_b;
cr0204s = zext(*[ram]:1 ea);
}
cuimm_h: uimm is cop0505 [uimm = cop0505 << 1;] { local tmp:$(XLEN) = uimm; export tmp; }
:c.lhu cr0204s, cuimm_h(cr0709s) is cop0001=0x0 & cr0204s & cuimm_h & cop0606=0 & cr0709s & cop1012=0x1 & cop1315=0x4
{
local ea:$(XLEN) = cr0709s + cuimm_h;
cr0204s = zext(*[ram]:2 ea);
}
:c.lh cr0204s, cuimm_h(cr0709s) is cop0001=0x0 & cr0204s & cuimm_h & cop0606=0x1 & cr0709s & cop1012=0x1 & cop1315=0x4
{
local ea:$(XLEN) = cr0709s + cuimm_h;
cr0204s = sext(*[ram]:2 ea);
}
:c.sb cr0204s, cuimm_b(cr0709s) is cop0001=0x0 & cr0204s & cuimm_b & cr0709s & cop1012=0x2 & cop1315=0x4
{
local ea:$(XLEN) = cr0709s + cuimm_b;
*[ram]:1 ea = cr0204s;
}
:c.sh cr0204s, cuimm_h(cr0709s) is cop0001=0x0 & cr0204s & cuimm_h & cr0709s & cop1012=0x3 & cop1315=0x4
{
local ea:$(XLEN) = cr0709s + cuimm_h;
*[ram]:2 ea = cr0204s;
}
:c.zext.b cr0709s is cop0001=0x1 & cop0204=0 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = zext(cr0709s);
}
:c.sext.b cr0709s is cop0001=0x1 & cop0204=0x1 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = sext(cr0709s);
}
:c.zext.h cr0709s is cop0001=0x1 & cop0204=0x2 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = zext(cr0709s);
}
:c.sext.h cr0709s is cop0001=0x1 & cop0204=0x3 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = sext(cr0709s);
}
:c.zext.w cr0709s is cop0001=0x1 & cop0204=0x4 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = zext(cr0709s);
}
:c.not cr0709s is cop0001=0x1 & cop0204=0x5 & cop0506=0x3 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = ~cr0709s;
}
:c.mul cr0709s, cr0204s is cop0001=0x1 & cr0204s & cop0506=0x2 & cr0709s & cop1012=0x7 & cop1315=0x4
{
cr0709s = cr0709s * cr0204s;
}