@@ -122,305 +122,296 @@ void asm_rv32_end_pass(asm_rv32_t *state);
122
122
123
123
////////////////////////////////////////////////////////////////////////////////
124
124
125
- #define RV32_ENCODE_TYPE_B (op , ft3 , rs1 , rs2 , imm ) \
126
- ((op & 0b1111111) | ((ft3 & 0b111) << 12) | ((imm & 0b100000000000) >> 4) | \
127
- ((imm & 0b11110) << 7) | ((rs1 & 0b11111) << 15) | \
128
- ((rs2 & 0b11111) << 20) | ((imm & 0b11111100000) << 20) | \
129
- ((imm & 0b1000000000000) << 19))
130
-
131
- #define RV32_ENCODE_TYPE_I (op , ft3 , rd , rs , imm ) \
132
- ((op & 0b1111111) | ((rd & 0b11111) << 7) | ((ft3 & 0b111) << 12) | \
133
- ((rs & 0b11111) << 15) | ((imm & 0b111111111111) << 20))
134
-
135
- #define RV32_ENCODE_TYPE_J (op , rd , imm ) \
136
- ((op & 0b1111111) | ((rd & 0b11111) << 7) | (imm & 0b11111111000000000000) | \
137
- ((imm & 0b100000000000) << 9) | ((imm & 0b11111111110) << 20) | \
138
- ((imm & 0b100000000000000000000) << 11))
139
-
140
- #define RV32_ENCODE_TYPE_R (op , ft3 , ft7 , rd , rs1 , rs2 ) \
141
- ((op & 0b1111111) | ((rd & 0b11111) << 7) | ((ft3 & 0b111) << 12) | \
142
- ((rs1 & 0b11111) << 15) | ((rs2 & 0b11111) << 20) | \
143
- ((ft7 & 0b1111111) << 25))
144
-
145
- #define RV32_ENCODE_TYPE_S (op , ft3 , rs1 , rs2 , imm ) \
146
- ((op & 0b1111111) | ((imm & 0b11111) << 7) | ((ft3 & 0b111) << 12) | \
147
- ((rs1 & 0b11111) << 15) | ((rs2 & 0b11111) << 20) | \
148
- ((imm & 0b111111100000) << 20))
149
-
150
- #define RV32_ENCODE_TYPE_U (op , rd , imm ) \
151
- ((op & 0b1111111) | ((rd & 0b11111) << 7) | \
152
- (imm & 0b11111111111111111111000000000000))
125
+ #define RV32_ENCODE_TYPE_B (op , ft3 , rs1 , rs2 , imm ) \
126
+ ((op & 0x7F) | ((ft3 & 0x07) << 12) | ((imm & 0x800) >> 4) | \
127
+ ((imm & 0x1E) << 7) | ((rs1 & 0x1F) << 15) | ((rs2 & 0x1F) << 20) | \
128
+ ((imm & 0x7E0) << 20) | ((imm & 0x1000) << 19))
129
+
130
+ #define RV32_ENCODE_TYPE_I (op , ft3 , rd , rs , imm ) \
131
+ ((op & 0x7F) | ((rd & 0x1F) << 7) | ((ft3 & 0x07) << 12) | \
132
+ ((rs & 0x1F) << 15) | ((imm & 0xFFF) << 20))
133
+
134
+ #define RV32_ENCODE_TYPE_J (op , rd , imm ) \
135
+ ((op & 0x7F) | ((rd & 0x1F) << 7) | (imm & 0xFF000) | \
136
+ ((imm & 0x800) << 9) | ((imm & 0x7FE) << 20) | ((imm & 0x100000) << 11))
137
+
138
+ #define RV32_ENCODE_TYPE_R (op , ft3 , ft7 , rd , rs1 , rs2 ) \
139
+ ((op & 0x7F) | ((rd & 0x1F) << 7) | ((ft3 & 0x07) << 12) | \
140
+ ((rs1 & 0x1F) << 15) | ((rs2 & 0x1F) << 20) | ((ft7 & 0x7F) << 25))
141
+
142
+ #define RV32_ENCODE_TYPE_S (op , ft3 , rs1 , rs2 , imm ) \
143
+ ((op & 0x7F) | ((imm & 0x1F) << 7) | ((ft3 & 0x07) << 12) | \
144
+ ((rs1 & 0x1F) << 15) | ((rs2 & 0x1F) << 20) | ((imm & 0xFE0) << 20))
145
+
146
+ #define RV32_ENCODE_TYPE_U (op , rd , imm ) \
147
+ ((op & 0x7F) | ((rd & 0x1F) << 7) | (imm & 0xFFFFF000))
153
148
154
149
#define RV32_ENCODE_TYPE_CB (op , ft3 , rs , imm ) \
155
- ((op & 0b11) | ((ft3 & 0b111) << 13) | ((rs & 0b111) << 7) | \
156
- (((imm) & 0b100000000) << 4) | (((imm) & 0b11000000) >> 1) | \
157
- (((imm) & 0b100000) >> 3) | (((imm) & 0b11000) << 7) | \
158
- (((imm) & 0b110) << 2))
150
+ ((op & 0x03) | ((ft3 & 0x07) << 13) | ((rs & 0x07) << 7) | \
151
+ (((imm) & 0x100) << 4) | (((imm) & 0xC0) >> 1) | (((imm) & 0x20) >> 3) | \
152
+ (((imm) & 0x18) << 7) | (((imm) & 0x06) << 2))
159
153
160
154
#define RV32_ENCODE_TYPE_CI (op , ft3 , rd , imm ) \
161
- ((op & 0b11 ) | ((ft3 & 0b111 ) << 13) | ((rd & 0b11111 ) << 7) | \
162
- (((imm) & 0b100000 ) << 7) | (((imm) & 0b11111 ) << 2))
155
+ ((op & 0x03 ) | ((ft3 & 0x07 ) << 13) | ((rd & 0x1F ) << 7) | \
156
+ (((imm) & 0x20 ) << 7) | (((imm) & 0x1F ) << 2))
163
157
164
158
#define RV32_ENCODE_TYPE_CIW (op , ft3 , rd , imm ) \
165
- ((op & 0b11 ) | ((ft3 & 0b111 ) << 13) | ((rd & 0b111 ) << 2) | \
166
- ((imm & 0b1111000000 ) << 1) | ((imm & 0b110000 ) << 7) | \
167
- ((imm & 0b1000 ) << 2) | ((imm & 0b100 ) << 4))
159
+ ((op & 0x03 ) | ((ft3 & 0x07 ) << 13) | ((rd & 0x07 ) << 2) | \
160
+ ((imm & 0x3C0 ) << 1) | ((imm & 0x30 ) << 7) | \
161
+ ((imm & 0x08 ) << 2) | ((imm & 0x04 ) << 4))
168
162
169
163
#define RV32_ENCODE_TYPE_CJ (op , ft3 , imm ) \
170
- ((op & 0b11) | ((ft3 & 0b111) << 13) | \
171
- ((imm & 0b1110) << 2) | ((imm & 0b1100000000) << 1) | \
172
- ((imm & 0b100000000000) << 1) | ((imm & 0b10000000000) >> 2) | \
173
- ((imm & 0b10000000) >> 1) | ((imm & 0b1000000) << 1) | \
174
- ((imm & 0b100000) >> 3) | ((imm & 0b10000) << 7))
164
+ ((op & 0x03) | ((ft3 & 0x07) << 13) | ((imm & 0x0E) << 2) | \
165
+ ((imm & 0x300) << 1) | ((imm & 0x800) << 1) | ((imm & 0x400) >> 2) | \
166
+ ((imm & 0x80) >> 1) | ((imm & 0x40) << 1) | ((imm & 0x20) >> 3) | \
167
+ ((imm & 0x10) << 7))
175
168
176
169
#define RV32_ENCODE_TYPE_CL (op , ft3 , rd , rs , imm ) \
177
- ((op & 0b11 ) | ((ft3 & 0b111 ) << 13) | ((rd & 0b111 ) << 2) | \
178
- ((rs & 0b111 ) << 7) | ((imm & 0b1000000 ) >> 1) | \
179
- ((imm & 0b111000) << 7) | ((imm & 0b100 ) << 4))
170
+ ((op & 0x03 ) | ((ft3 & 0x07 ) << 13) | ((rd & 0x07 ) << 2) | \
171
+ ((rs & 0x07 ) << 7) | ((imm & 0x40 ) >> 1) | ((imm & 0x38) << 7 ) | \
172
+ ((imm & 0x04 ) << 4))
180
173
181
174
#define RV32_ENCODE_TYPE_CR (op , ft4 , rs1 , rs2 ) \
182
- ((op & 0b11) | ((rs2 & 0b11111) << 2) | ((rs1 & 0b11111) << 7) | \
183
- ((ft4 & 0b1111) << 12))
175
+ ((op & 0x03) | ((rs2 & 0x1F) << 2) | ((rs1 & 0x1F) << 7) | ((ft4 & 0x0F) << 12))
184
176
185
177
#define RV32_ENCODE_TYPE_CSS (op , ft3 , rs , imm ) \
186
- ((op & 0b11) | ((ft3 & 0b111) << 13) | ((rs & 0b11111) << 2) | \
187
- ((imm) & 0b111111) << 7)
178
+ ((op & 0x03) | ((ft3 & 0x07) << 13) | ((rs & 0x1F) << 2) | ((imm) & 0x3F) << 7)
188
179
189
180
void asm_rv32_emit_word_opcode (asm_rv32_t * state , mp_uint_t opcode );
190
181
void asm_rv32_emit_halfword_opcode (asm_rv32_t * state , mp_uint_t opcode );
191
182
192
183
// ADD RD, RS1, RS2
193
184
static inline void asm_rv32_opcode_add (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
194
185
// R: 0000000 ..... ..... 000 ..... 0110011
195
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b000 , 0b0000000 , rd , rs1 , rs2 ));
186
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x00 , 0x00 , rd , rs1 , rs2 ));
196
187
}
197
188
198
189
// ADDI RD, RS, IMMEDIATE
199
190
static inline void asm_rv32_opcode_addi (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t immediate ) {
200
191
// I: ............ ..... 000 ..... 0010011
201
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0010011 , 0b000 , rd , rs , immediate ));
192
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x13 , 0x00 , rd , rs , immediate ));
202
193
}
203
194
204
195
// AND RD, RS1, RS2
205
196
static inline void asm_rv32_opcode_and (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
206
197
// R: 0000000 ..... ..... 111 ..... 0110011
207
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b111 , 0b0000000 , rd , rs1 , rs2 ));
198
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x07 , 0x00 , rd , rs1 , rs2 ));
208
199
}
209
200
210
201
// AUIPC RD, offset
211
202
static inline void asm_rv32_opcode_auipc (asm_rv32_t * state , mp_uint_t rd , mp_int_t offset ) {
212
203
// U: .................... ..... 0010111
213
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_U (0b0010111 , rd , offset ));
204
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_U (0x17 , rd , offset ));
214
205
}
215
206
216
207
// BEQ RS1, RS2, OFFSET
217
208
static inline void asm_rv32_opcode_beq (asm_rv32_t * state , mp_uint_t rs1 , mp_uint_t rs2 , mp_int_t offset ) {
218
209
// B: . ...... ..... ..... 000 .... . 1100011
219
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_B (0b1100011 , 0b000 , rs1 , rs2 , offset ));
210
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_B (0x63 , 0x00 , rs1 , rs2 , offset ));
220
211
}
221
212
222
213
// BNE RS1, RS2, OFFSET
223
214
static inline void asm_rv32_opcode_bne (asm_rv32_t * state , mp_uint_t rs1 , mp_uint_t rs2 , mp_int_t offset ) {
224
215
// B: . ...... ..... ..... 001 .... . 1100011
225
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_B (0b1100011 , 0b001 , rs1 , rs2 , offset ));
216
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_B (0x63 , 0x01 , rs1 , rs2 , offset ));
226
217
}
227
218
228
219
// C.ADD RD, RS
229
220
static inline void asm_rv32_opcode_cadd (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs ) {
230
221
// CR: 1001 ..... ..... 10
231
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0b10 , 0b1001 , rd , rs ));
222
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0x02 , 0x09 , rd , rs ));
232
223
}
233
224
234
225
// C.ADDI RD, IMMEDIATE
235
226
static inline void asm_rv32_opcode_caddi (asm_rv32_t * state , mp_uint_t rd , mp_int_t immediate ) {
236
227
// CI: 000 . ..... ..... 01
237
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0b01 , 0b000 , rd , immediate ));
228
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0x01 , 0x00 , rd , immediate ));
238
229
}
239
230
240
231
// C.ADDI4SPN RD', IMMEDIATE
241
232
static inline void asm_rv32_opcode_caddi4spn (asm_rv32_t * state , mp_uint_t rd , mp_uint_t immediate ) {
242
233
// CIW: 000 ........ ... 00
243
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CIW (0b00 , 0b000 , rd , immediate ));
234
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CIW (0x00 , 0x00 , rd , immediate ));
244
235
}
245
236
246
237
// C.BEQZ RS', IMMEDIATE
247
238
static inline void asm_rv32_opcode_cbeqz (asm_rv32_t * state , mp_uint_t rs , mp_int_t offset ) {
248
239
// CB: 110 ... ... ..... 01
249
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CB (0b01 , 0b110 , rs , offset ));
240
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CB (0x01 , 0x06 , rs , offset ));
250
241
}
251
242
252
243
// C.BNEZ RS', IMMEDIATE
253
244
static inline void asm_rv32_opcode_cbnez (asm_rv32_t * state , mp_uint_t rs , mp_int_t offset ) {
254
245
// CB: 111 ... ... ..... 01
255
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CB (0b01 , 0b111 , rs , offset ));
246
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CB (0x01 , 0x07 , rs , offset ));
256
247
}
257
248
258
249
// C.J OFFSET
259
250
static inline void asm_rv32_opcode_cj (asm_rv32_t * state , mp_int_t offset ) {
260
251
// CJ: 101 ........... 01
261
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CJ (0b01 , 0b101 , offset ));
252
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CJ (0x01 , 0x05 , offset ));
262
253
}
263
254
264
255
// C.JALR RS
265
256
static inline void asm_rv32_opcode_cjalr (asm_rv32_t * state , mp_uint_t rs ) {
266
257
// CR: 1001 ..... 00000 10
267
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0b10 , 0b1001 , rs , 0 ));
258
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0x02 , 0x09 , rs , 0 ));
268
259
}
269
260
270
261
// C.JR RS
271
262
static inline void asm_rv32_opcode_cjr (asm_rv32_t * state , mp_uint_t rs ) {
272
263
// CR: 1000 ..... 00000 10
273
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0b10 , 0b1000 , rs , 0 ));
264
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0x02 , 0x08 , rs , 0 ));
274
265
}
275
266
276
267
// C.LI RD, IMMEDIATE
277
268
static inline void asm_rv32_opcode_cli (asm_rv32_t * state , mp_uint_t rd , mp_int_t immediate ) {
278
269
// CI: 010 . ..... ..... 01
279
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0b01 , 0b010 , rd , immediate ));
270
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0x01 , 0x02 , rd , immediate ));
280
271
}
281
272
282
273
// C.LUI RD, IMMEDIATE
283
274
static inline void asm_rv32_opcode_clui (asm_rv32_t * state , mp_uint_t rd , mp_int_t immediate ) {
284
275
// CI: 011 . ..... ..... 01
285
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0b01 , 0b011 , rd , immediate >> 12 ));
276
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0x01 , 0x03 , rd , immediate >> 12 ));
286
277
}
287
278
288
279
// C.LW RD', OFFSET(RS')
289
280
static inline void asm_rv32_opcode_clw (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t offset ) {
290
281
// CL: 010 ... ... .. ... 00
291
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CL (0b00 , 0b010 , rd , rs , offset ));
282
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CL (0x00 , 0x02 , rd , rs , offset ));
292
283
}
293
284
294
285
// C.LWSP RD, OFFSET
295
286
static inline void asm_rv32_opcode_clwsp (asm_rv32_t * state , mp_uint_t rd , mp_uint_t offset ) {
296
287
// CI: 010 . ..... ..... 10
297
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0b10 , 0b010 , rd , ((offset & 0b11000000 ) >> 6 ) | (offset & 0b111100 )));
288
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CI (0x02 , 0x02 , rd , ((offset & 0xC0 ) >> 6 ) | (offset & 0x3C )));
298
289
}
299
290
300
291
// C.MV RD, RS
301
292
static inline void asm_rv32_opcode_cmv (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs ) {
302
293
// CR: 1000 ..... ..... 10
303
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0b10 , 0b1000 , rd , rs ));
294
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CR (0x02 , 0x08 , rd , rs ));
304
295
}
305
296
306
297
// C.SWSP RS, OFFSET
307
298
static inline void asm_rv32_opcode_cswsp (asm_rv32_t * state , mp_uint_t rs , mp_uint_t offset ) {
308
299
// CSS: 010 ...... ..... 10
309
- asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CSS (0b10 , 0b110 , rs , ((offset & 0b11000000 ) >> 6 ) | (offset & 0b111100 )));
300
+ asm_rv32_emit_halfword_opcode (state , RV32_ENCODE_TYPE_CSS (0x02 , 0x06 , rs , ((offset & 0xC0 ) >> 6 ) | (offset & 0x3C )));
310
301
}
311
302
312
303
// JALR RD, RS, offset
313
304
static inline void asm_rv32_opcode_jalr (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t offset ) {
314
305
// I: ............ ..... 000 ..... 1100111
315
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b1100111 , 0b000 , rd , rs , offset ));
306
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x67 , 0x00 , rd , rs , offset ));
316
307
}
317
308
318
309
// LBU RD, OFFSET(RS)
319
310
static inline void asm_rv32_opcode_lbu (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t offset ) {
320
311
// I: ............ ..... 100 ..... 0000011
321
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0000011 , 0b100 , rd , rs , offset ));
312
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x03 , 0x04 , rd , rs , offset ));
322
313
}
323
314
324
315
// LHU RD, OFFSET(RS)
325
316
static inline void asm_rv32_opcode_lhu (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t offset ) {
326
317
// I: ............ ..... 101 ..... 0000011
327
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0000011 , 0b101 , rd , rs , offset ));
318
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x03 , 0x05 , rd , rs , offset ));
328
319
}
329
320
330
321
// LUI RD, immediate
331
322
static inline void asm_rv32_opcode_lui (asm_rv32_t * state , mp_uint_t rd , mp_int_t immediate ) {
332
323
// U: .................... ..... 0110111
333
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_U (0b0110111 , rd , immediate ));
324
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_U (0x37 , rd , immediate ));
334
325
}
335
326
336
327
// LW RD, OFFSET(RS)
337
328
static inline void asm_rv32_opcode_lw (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t offset ) {
338
329
// I: ............ ..... 010 ..... 0000011
339
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0000011 , 0b010 , rd , rs , offset ));
330
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x03 , 0x02 , rd , rs , offset ));
340
331
}
341
332
342
333
// MUL RD, RS1, RS2
343
334
static inline void asm_rv32m_opcode_mul (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
344
335
// R: 0000001 ..... ..... 000 ..... 0110011
345
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b000 , 0b0000001 , rd , rs1 , rs2 ));
336
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x00 , 0x01 , rd , rs1 , rs2 ));
346
337
}
347
338
348
339
// OR RD, RS1, RS2
349
340
static inline void asm_rv32_opcode_or (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
350
341
// R: 0000000 ..... ..... 110 ..... 0110011
351
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b110 , 0b0000000 , rd , rs1 , rs2 ));
342
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x06 , 0x00 , rd , rs1 , rs2 ));
352
343
}
353
344
354
345
// SLL RD, RS1, RS2
355
346
static inline void asm_rv32_opcode_sll (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
356
347
// R: 0000000 ..... ..... 001 ..... 0110011
357
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b001 , 0b0000000 , rd , rs1 , rs2 ));
348
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x01 , 0x00 , rd , rs1 , rs2 ));
358
349
}
359
350
360
351
// SLLI RD, RS, IMMEDIATE
361
352
static inline void asm_rv32_opcode_slli (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_uint_t immediate ) {
362
353
// I: 0000000..... ..... 001 ..... 0010011
363
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0010011 , 0b001 , rd , rs , immediate & 0x1F ));
354
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x13 , 0x01 , rd , rs , immediate & 0x1F ));
364
355
}
365
356
366
357
// SRL RD, RS1, RS2
367
358
static inline void asm_rv32_opcode_srl (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
368
359
// R: 0000000 ..... ..... 101 ..... 0110011
369
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b101 , 0b0000000 , rd , rs1 , rs2 ));
360
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x05 , 0x00 , rd , rs1 , rs2 ));
370
361
}
371
362
372
363
// SLT RD, RS1, RS2
373
364
static inline void asm_rv32_opcode_slt (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
374
365
// R: 0000000 ..... ..... 010 ..... 0110011
375
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b010 , 0b0000000 , rd , rs1 , rs2 ));
366
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x02 , 0x00 , rd , rs1 , rs2 ));
376
367
}
377
368
378
369
// SLTU RD, RS1, RS2
379
370
static inline void asm_rv32_opcode_sltu (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
380
371
// R: 0000000 ..... ..... 011 ..... 0110011
381
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b011 , 0b0000000 , rd , rs1 , rs2 ));
372
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x03 , 0x00 , rd , rs1 , rs2 ));
382
373
}
383
374
384
375
// SRA RD, RS1, RS2
385
376
static inline void asm_rv32_opcode_sra (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
386
377
// R: 0100000 ..... ..... 101 ..... 0110011
387
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b101 , 0b0100000 , rd , rs1 , rs2 ));
378
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x05 , 0x20 , rd , rs1 , rs2 ));
388
379
}
389
380
390
381
// SUB RD, RS1, RS2
391
382
static inline void asm_rv32_opcode_sub (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
392
383
// R: 0100000 ..... ..... 000 ..... 0110011
393
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b000 , 0b0100000 , rd , rs1 , rs2 ));
384
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x00 , 0x20 , rd , rs1 , rs2 ));
394
385
}
395
386
396
387
// SB RS2, OFFSET(RS1)
397
388
static inline void asm_rv32_opcode_sb (asm_rv32_t * state , mp_uint_t rs2 , mp_uint_t rs1 , mp_int_t offset ) {
398
389
// S: ....... ..... ..... 000 ..... 0100011
399
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0b0100011 , 0b000 , rs1 , rs2 , offset ));
390
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0x23 , 0x00 , rs1 , rs2 , offset ));
400
391
}
401
392
402
393
// SH RS2, OFFSET(RS1)
403
394
static inline void asm_rv32_opcode_sh (asm_rv32_t * state , mp_uint_t rs2 , mp_uint_t rs1 , mp_int_t offset ) {
404
395
// S: ....... ..... ..... 001 ..... 0100011
405
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0b0100011 , 0b001 , rs1 , rs2 , offset ));
396
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0x23 , 0x01 , rs1 , rs2 , offset ));
406
397
}
407
398
408
399
// SW RS2, OFFSET(RS1)
409
400
static inline void asm_rv32_opcode_sw (asm_rv32_t * state , mp_uint_t rs2 , mp_uint_t rs1 , mp_int_t offset ) {
410
401
// S: ....... ..... ..... 010 ..... 0100011
411
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0b0100011 , 0b010 , rs1 , rs2 , offset ));
402
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_S (0x23 , 0x02 , rs1 , rs2 , offset ));
412
403
}
413
404
414
405
// XOR RD, RS1, RS2
415
406
static inline void asm_rv32_opcode_xor (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs1 , mp_uint_t rs2 ) {
416
407
// R: 0000000 ..... ..... 100 ..... 0110011
417
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0b0110011 , 0b100 , 0b0000000 , rd , rs1 , rs2 ));
408
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_R (0x33 , 0x04 , 0x00 , rd , rs1 , rs2 ));
418
409
}
419
410
420
411
// XORI RD, RS, IMMEDIATE
421
412
static inline void asm_rv32_opcode_xori (asm_rv32_t * state , mp_uint_t rd , mp_uint_t rs , mp_int_t immediate ) {
422
413
// I: ............ ..... 100 ..... 0010011
423
- asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0b0010011 , 0b100 , rd , rs , immediate ));
414
+ asm_rv32_emit_word_opcode (state , RV32_ENCODE_TYPE_I (0x13 , 0x04 , rd , rs , immediate ));
424
415
}
425
416
426
417
#define ASM_WORD_SIZE (4)
0 commit comments