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
|
# Xh3bextm macros are from the Hazard3 reference manual, slightly modified
.macro h3.bextm rd rs1 rs2 nbits
.if (\nbits < 1) || (\nbits > 8)
.err
.endif
.insn r 0x0b, 0x0, (((\nbits - 1) & 0x7 ) << 1), \rd, \rs1, \rs2
.endm
.macro h3.bextmi rd rs1 shamt nbits
.if (\nbits < 1) || (\nbits > 8)
.err
.endif
.if (\shamt < 0) || (\shamt > 31)
.err
.endif
.insn i 0x0b, 0x4, \rd, \rs1, (\shamt & 0x1f) | (((\nbits - 1) & 0x7 ) << 6)
.endm
li t0,0xdeadbeef
li t1,4
h3.bextm s0,t0,t1,6
# 0xDEADBEEF = 1101 1110 1010 1101 1011 1110 1110 1111 (rs1)
# vv vvvv
# 10 1110 = 0x2E
# |---6---| (imm)
# |--4-| (rs2)
h3.bextmi s1,t0,16,3
# 0xDEADBEEF = 1101 1110 1010 1101 1011 1110 1110 1111 (rs1)
# vvv
# 101 = 0x5
# |-3-| (imm2)
# |--------16--------| (imm1)
li a7,10
ecall
|