selfhost: drop snake_case locals in dyn/dynout/obj + w6a + cgen + ww driver
This commit is contained in:
@@ -99,21 +99,21 @@ fn emitrex(a: *asm_, regbit: i32, rmbit: i32, w: i32) void = {
|
||||
|
||||
// ModR/M + (optional) SIB + displacement for [base+disp].
|
||||
// Special-cases SP (needs SIB) and BP (forces explicit disp).
|
||||
fn emitmodrmmem(a: *asm_, reg_field: i32, base: i32, disp: i64) void = {
|
||||
fn emitmodrmmem(a: *asm_, regfield: i32, base: i32, disp: i64) void = {
|
||||
let rm: i32 = rcode(base);
|
||||
let needsib: bool = (rm == 4);
|
||||
let forced_disp: bool = false;
|
||||
if (rm == 5) { if (disp == 0i64) { forced_disp = true; }; };
|
||||
let forceddisp: bool = false;
|
||||
if (rm == 5) { if (disp == 0i64) { forceddisp = true; }; };
|
||||
|
||||
let mod: i32 = 2;
|
||||
if (disp == 0i64) {
|
||||
if (!forced_disp) { mod = 0; }
|
||||
if (!forceddisp) { mod = 0; }
|
||||
else { mod = 1; };
|
||||
} else {
|
||||
if (disp >= -128i64) { if (disp <= 127i64) { mod = 1; }; };
|
||||
};
|
||||
|
||||
emitbyte(a, modrmbyte(mod, reg_field, rm));
|
||||
emitbyte(a, modrmbyte(mod, regfield, rm));
|
||||
if (needsib) {
|
||||
emitbyte(a, 36u8); // 0x24: scale=0 idx=4(none) base=4
|
||||
};
|
||||
@@ -132,17 +132,17 @@ fn encoderr(a: *asm_, opcode: u8, src: i32, dst: i32) void = {
|
||||
};
|
||||
|
||||
// reg→mem(base, disp) (e.g. MOVQ src reg into mem; opcode = 0x89).
|
||||
fn encoderm(a: *asm_, opcode: u8, src_reg: i32, base: i32, disp: i64) void = {
|
||||
emitrex(a, rhi(src_reg), rhi(base), 1);
|
||||
fn encoderm(a: *asm_, opcode: u8, srcreg: i32, base: i32, disp: i64) void = {
|
||||
emitrex(a, rhi(srcreg), rhi(base), 1);
|
||||
emitbyte(a, opcode);
|
||||
emitmodrmmem(a, rcode(src_reg), base, disp);
|
||||
emitmodrmmem(a, rcode(srcreg), base, disp);
|
||||
};
|
||||
|
||||
// mem(base, disp) → reg (e.g. MOVQ mem into reg; opcode = 0x8B).
|
||||
fn encodemr(a: *asm_, opcode: u8, dst_reg: i32, base: i32, disp: i64) void = {
|
||||
emitrex(a, rhi(dst_reg), rhi(base), 1);
|
||||
fn encodemr(a: *asm_, opcode: u8, dstreg: i32, base: i32, disp: i64) void = {
|
||||
emitrex(a, rhi(dstreg), rhi(base), 1);
|
||||
emitbyte(a, opcode);
|
||||
emitmodrmmem(a, rcode(dst_reg), base, disp);
|
||||
emitmodrmmem(a, rcode(dstreg), base, disp);
|
||||
};
|
||||
|
||||
// OPCODE /n imm32 reg form (e.g. ADDQ $imm, reg).
|
||||
@@ -162,29 +162,29 @@ fn encodeunary(a: *asm_, opcode: u8, subop: i32, dst: i32) void = {
|
||||
|
||||
// SSE2 helpers. Plan 9 syntax: source first, destination second.
|
||||
// For ADDSD-style ops we put dst in the reg field, src in r/m.
|
||||
fn sserr(a: *asm_, prefix: u8, op2: u8, reg_op: i32, rm_op: i32) void = {
|
||||
fn sserr(a: *asm_, prefix: u8, op2: u8, regop: i32, rmop: i32) void = {
|
||||
if (prefix != 0u8) { emitbyte(a, prefix); };
|
||||
emitrex(a, rhi(reg_op), rhi(rm_op), 0);
|
||||
emitrex(a, rhi(regop), rhi(rmop), 0);
|
||||
emitbyte(a, 15u8); // 0x0F
|
||||
emitbyte(a, op2);
|
||||
emitbyte(a, modrmbyte(3, rcode(reg_op), rcode(rm_op)));
|
||||
emitbyte(a, modrmbyte(3, rcode(regop), rcode(rmop)));
|
||||
};
|
||||
|
||||
fn ssemrload(a: *asm_, prefix: u8, op2: u8, reg_op: i32, base: i32, disp: i64) void = {
|
||||
fn ssemrload(a: *asm_, prefix: u8, op2: u8, regop: i32, base: i32, disp: i64) void = {
|
||||
if (prefix != 0u8) { emitbyte(a, prefix); };
|
||||
emitrex(a, rhi(reg_op), rhi(base), 0);
|
||||
emitrex(a, rhi(regop), rhi(base), 0);
|
||||
emitbyte(a, 15u8);
|
||||
emitbyte(a, op2);
|
||||
emitmodrmmem(a, rcode(reg_op), base, disp);
|
||||
emitmodrmmem(a, rcode(regop), base, disp);
|
||||
};
|
||||
|
||||
// REX.W variant of sse_rr (CVTTSD2SI / CVTSI2SD).
|
||||
fn sserrw(a: *asm_, prefix: u8, op2: u8, reg_op: i32, rm_op: i32) void = {
|
||||
fn sserrw(a: *asm_, prefix: u8, op2: u8, regop: i32, rmop: i32) void = {
|
||||
if (prefix != 0u8) { emitbyte(a, prefix); };
|
||||
emitrex(a, rhi(reg_op), rhi(rm_op), 1);
|
||||
emitrex(a, rhi(regop), rhi(rmop), 1);
|
||||
emitbyte(a, 15u8);
|
||||
emitbyte(a, op2);
|
||||
emitbyte(a, modrmbyte(3, rcode(reg_op), rcode(rm_op)));
|
||||
emitbyte(a, modrmbyte(3, rcode(regop), rcode(rmop)));
|
||||
};
|
||||
|
||||
// ---- label resolution / fixups ----------------------------------------
|
||||
@@ -629,7 +629,7 @@ export fn encode(a: *asm_) i32 = {
|
||||
|
||||
// Conditional jumps. 0x0F + cc + rel32.
|
||||
let cc: u8 = 0u8;
|
||||
let is_jcc: bool = true;
|
||||
let isjcc: bool = true;
|
||||
if (op == A_JE) { cc = 132u8; } // 0x84
|
||||
else { if (op == A_JZ) { cc = 132u8; }
|
||||
else { if (op == A_JNE) { cc = 133u8; }
|
||||
@@ -642,8 +642,8 @@ export fn encode(a: *asm_) i32 = {
|
||||
else { if (op == A_JBE) { cc = 134u8; }
|
||||
else { if (op == A_JA) { cc = 135u8; }
|
||||
else { if (op == A_JAE) { cc = 131u8; }
|
||||
else { is_jcc = false; };};};};};};};};};};};};
|
||||
if (is_jcc) {
|
||||
else { isjcc = false; };};};};};};};};};};};};
|
||||
if (isjcc) {
|
||||
emitbyte(a, 15u8);
|
||||
emitbyte(a, cc);
|
||||
addfixup(a, a.textlen, p.to.asym);
|
||||
|
||||
Reference in New Issue
Block a user