From 83bdd501a3a4e73a98080cc4360779d43a046ed0 Mon Sep 17 00:00:00 2001 From: Brendan Punsky Date: Thu, 18 Jun 2026 05:29:20 -0400 Subject: [PATCH] rexcode: remove dead BFCSEL else-target scaffolding; tidy mips COPY specgen BFCSEL's else-target turned out to be the implicit fall-through, so the BF_BELSE operand encoding, the BFCSEL_ELSE_T32 relocation, and their encoder/decoder cases were never referenced by any table entry. Remove them. Also restructure the MSA COPY specgen loop so COPY_U only iterates .B/.H (COPY_U.W is mips64-only and emitted in the mips64 section), which drops the spurious 'skipped COPY_U_W' message. No functional change to any generated encode form; arm64/arm32/mips all still 100%, 461/600/281 tests green. --- core/rexcode/arm32/decoder.odin | 3 --- core/rexcode/arm32/encoder.odin | 6 ------ core/rexcode/arm32/encoding_types.odin | 1 - core/rexcode/arm32/reloc.odin | 1 - .../arm32/tables/arm32.encode_forms.bin | Bin 35280 -> 35280 bytes core/rexcode/arm32/tables/arm32.entries.bin | Bin 35280 -> 35280 bytes core/rexcode/mips/tablegen/specgen.lua | 10 ++++++---- 7 files changed, 6 insertions(+), 15 deletions(-) diff --git a/core/rexcode/arm32/decoder.odin b/core/rexcode/arm32/decoder.odin index 3e21df7e9..ad831c0b8 100644 --- a/core/rexcode/arm32/decoder.odin +++ b/core/rexcode/arm32/decoder.odin @@ -473,9 +473,6 @@ unpack_operand :: proc(word: u32, enc: Operand_Encoding, ot: Operand_Type) -> Op imm10 := (word >> 1) & 0x3FF // hw1[10:1] val := (imm10 << 1) | j return op_rel_offset(i64(val) << 1) - case .BF_BELSE: - imm := (word >> 23) & 0xF - return op_rel_offset(i64(imm) << 1) case .BF_RM: return op_reg(Register(REG_GPR | u16((word >> 16) & 0xF))) case .BFCSEL_COND: diff --git a/core/rexcode/arm32/encoder.odin b/core/rexcode/arm32/encoder.odin index 29b72f922..5f66435f6 100644 --- a/core/rexcode/arm32/encoder.odin +++ b/core/rexcode/arm32/encoder.odin @@ -574,12 +574,6 @@ pack_operand_inline :: #force_inline proc( type = .BF_BLOC_T32, size = 4, inst_idx = inst_idx, }) return 0 - case .BF_BELSE: - append(relocs, Relocation{ - offset = pc, label_id = u32(op.relative), - type = .BFCSEL_ELSE_T32, size = 4, inst_idx = inst_idx, - }) - return 0 case .BF_RM: return (u32(reg_hw(op.reg)) & 0xF) << 16 // Rm at hw0[3:0] (word bits 19:16) case .BFCSEL_COND: diff --git a/core/rexcode/arm32/encoding_types.odin b/core/rexcode/arm32/encoding_types.odin index 7bea46b5e..cb7bc636b 100644 --- a/core/rexcode/arm32/encoding_types.odin +++ b/core/rexcode/arm32/encoding_types.odin @@ -356,7 +356,6 @@ Operand_Encoding :: enum u8 { // ARMv8.1-M Branch Future fields (T32): BF_BOFF, // bf-point offset: imm4 at hw0[10:7], (label-PC-4)/2 BF_BLOC, // branch target: J at hw1[11] + imm10 at hw1[10:1] - BF_BELSE, // BFCSEL else-target: imm4 at hw0[? ] (relative to bf-point) BF_RM, // BFLX/BFX register target at hw0[3:0] BFCSEL_COND, // BFCSEL condition at hw0[5:2] diff --git a/core/rexcode/arm32/reloc.odin b/core/rexcode/arm32/reloc.odin index 09f56eb80..948777234 100644 --- a/core/rexcode/arm32/reloc.odin +++ b/core/rexcode/arm32/reloc.odin @@ -44,7 +44,6 @@ Relocation_Type :: enum u8 { // T32 Branch Future (ARMv8.1-M) BF_BOFF_T32, // bf-point: imm4 at hw0[10:7] = (label - (PC+4))/2 BF_BLOC_T32, // branch target: J at hw1[11] + imm10 at hw1[10:1] - BFCSEL_ELSE_T32, // BFCSEL else-target relative to the bf-point // Literal load (ADR / LDR PC-rel) LDR_LITERAL_A32, // signed 12-bit (U bit + imm12) diff --git a/core/rexcode/arm32/tables/arm32.encode_forms.bin b/core/rexcode/arm32/tables/arm32.encode_forms.bin index da7550d80bbb2f514cc4c4b66fe29318fd9bbfca..db36cfc972a380f94eec2f58a4a71c76b46a3422 100644 GIT binary patch delta 2027 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 m2ThwlkOUiGf`SYzETRm8o86mVvoJ{1aec zC}QN~5@1l*iDwYtfD0DG1p^R*C5&900t{N3@eBf7aFwZyTwDSSS~~Fz0SpbF0w89l zAp{xWf*CNudWHZdxM(I!lp%l_E|`N5WQPl;GIDYXFsOs9XK45&0J8}$$OsqAK&WJb z3ueLvCpReyGsbV8rdY@;7RkWC@Zp03^N0Wc`8gOE7BEONFfc@Jmet?F#2B*qlHn6Z zZE(PRzQEt`Ux0z35IJCAg1Iok$q$W1w85bZk^+S;N|?a};bAse!2}!|j18ZmAqNj6 zP#D1kvk<|-3Rjtp5M+T1qJ+_BY+(cwgolw9g8)+lOf(A~NCK>I!EBh|=DQ~9qS|2$ z3=9Du>c4*Y|NlP+1H&Q)83qOhke~xXa4|%1v%Z%L3uDye50Y5tfgA@a!s2BrNYz%`u!vXesh@dnBBcrGo6H9E&WT7Bi zrr4OxfkCOFS?TH-3=9kgZx|R1{>w5dFfu7}2r#6pfCLp_g3L^coSXvb>Y5o03rr#WEQ3m0Z z;$jqF(BjS5ER}Vi$vz`Np7C7)M9PMVi;+=4iQ@q$>a>#o!jS0s0EUM5f&5@sg7PuM=>d#zK~NF}3r-d9xj`|>@Q#6@0c7TPBtejNu;6<} z1`wFMw;;qmh=GCeLBfas{|kOdF{*rK)M8{{@COSPzy#kisxvS!q%klsFdpFl!1&?+ zeLJ*qp85kH65Q0+~^cfi#LU83UsPBLjCdNL1nT z2Z*3KlHdZEAS7pSXT`-ZFfinQW@z{i(htcR+&m!BgwG5OU_)iV`2`~A027o&5)Xh2dPZ$~FCkHly%G85$4gW66H~g1oR0xHoScU`q zaKSK`;N%I7)r_f=d7AdX(&j&C+WZ4baj>)r6Z{7fgr!ZGAOn*kBO_Gs08H>3QZi)t m2ThwlkOUiGf`SYzETRm8o86mVvoJ GPR) and INSERT (GPR -> vector lane) ---------- -for _, b in ipairs({{"COPY_S","copy_s"},{"COPY_U","copy_u"}}) do - for _, d in ipairs({{"B","b",15},{"H","h",7},{"W","w",3}}) do - local r = entry(b[1].."_"..d[1], "{.GPR,.MSA_VEC,.IMM5,.NONE}", "{.GPR_AT_6,.WS,.MSA_ELM_IDX,.NONE}", "MSA", - function(v) return string.format("%s.%s $%d,$w%d[%d]", b[2], d[2], v[1], v[2], v[3]) end, {31,31,d[3]}) +-- COPY_S has .B/.H/.W; COPY_U only .B/.H on mips32 (COPY_U.W is a mips64-only +-- form, emitted in the mips64 section below). +for _, c in ipairs({{"COPY_S","copy_s",{{"B","b",15},{"H","h",7},{"W","w",3}}}, {"COPY_U","copy_u",{{"B","b",15},{"H","h",7}}}}) do + for _, d in ipairs(c[3]) do + local r = entry(c[1].."_"..d[1], "{.GPR,.MSA_VEC,.IMM5,.NONE}", "{.GPR_AT_6,.WS,.MSA_ELM_IDX,.NONE}", "MSA", + function(v) return string.format("%s.%s $%d,$w%d[%d]", c[2], d[2], v[1], v[2], v[3]) end, {31,31,d[3]}) if r then sections[#sections+1]=r end end end