# 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
