@@ -2386,11 +2386,11 @@ enum Nf {
23862386
23872387#undef INSN
23882388
2389- #define INSN (NAME, funct3, op, REGISTER_TYPE, CHECK ) \
2390- void NAME (REGISTER_TYPE Rd, uint32_t uimm) { \
2389+ #define INSN (NAME, funct3, op ) \
2390+ void NAME (Register Rd, uint32_t uimm) { \
23912391 assert_cond (is_unsigned_imm_in_range (uimm, 9 , 0 )); \
23922392 assert_cond ((uimm & 0b111 ) == 0 ); \
2393- IF (CHECK, assert_cond (Rd != x0);) \
2393+ assert_cond (Rd != x0); \
23942394 uint16_t insn = 0 ; \
23952395 c_patch ((address)&insn, 1 , 0 , op); \
23962396 c_patch ((address)&insn, 4 , 2 , (uimm & right_n_bits (9 )) >> 6 ); \
@@ -2401,16 +2401,26 @@ enum Nf {
24012401 emit_int16 (insn); \
24022402 }
24032403
2404- #define IF (BOOL, ...) IF_##BOOL(__VA_ARGS__)
2405- #define IF_true (code ) code
2406- #define IF_false (code )
2404+ INSN (c_ldsp, 0b011 , 0b10 );
2405+
2406+ #undef INSN
2407+
2408+ #define INSN (NAME, funct3, op ) \
2409+ void NAME (FloatRegister Rd, uint32_t uimm) { \
2410+ assert_cond (is_unsigned_imm_in_range (uimm, 9 , 0 )); \
2411+ assert_cond ((uimm & 0b111 ) == 0 ); \
2412+ uint16_t insn = 0 ; \
2413+ c_patch ((address)&insn, 1 , 0 , op); \
2414+ c_patch ((address)&insn, 4 , 2 , (uimm & right_n_bits (9 )) >> 6 ); \
2415+ c_patch ((address)&insn, 6 , 5 , (uimm & right_n_bits (5 )) >> 3 ); \
2416+ c_patch_reg ((address)&insn, 7 , Rd); \
2417+ c_patch ((address)&insn, 12 , 12 , (uimm & nth_bit (5 )) >> 5 ); \
2418+ c_patch ((address)&insn, 15 , 13 , funct3); \
2419+ emit_int16 (insn); \
2420+ }
24072421
2408- INSN (c_ldsp, 0b011 , 0b10 , Register, true );
2409- INSN (c_fldsp, 0b001 , 0b10 , FloatRegister, false );
2422+ INSN (c_fldsp, 0b001 , 0b10 );
24102423
2411- #undef IF_false
2412- #undef IF_true
2413- #undef IF
24142424#undef INSN
24152425
24162426#define INSN (NAME, funct3, op, REGISTER_TYPE ) \
0 commit comments