| ... | ... | @@ -402,7 +402,21 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) |
| 402 | 402 | if (elf_sym.flags.is_extern_ptr) emit_mnemonic = .mov; |
| 403 | 403 | break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }; |
| 404 | 404 | }, |
| 405 | | .mov => break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }, |
| 405 | .mov => { |
| 406 | if (elf_sym.flags.is_extern_ptr) { |
| 407 | const reg = ops[0].reg; |
| 408 | lower.result_insts[lower.result_insts_len] = |
| 409 | try Instruction.new(.none, .mov, &[_]Operand{ |
| 410 | .{ .reg = reg.to64() }, |
| 411 | .{ .mem = Memory.rip(.qword, 0) }, |
| 412 | }); |
| 413 | lower.result_insts_len += 1; |
| 414 | break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{ .base = .{ |
| 415 | .reg = reg.to64(), |
| 416 | } }) }; |
| 417 | } |
| 418 | break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }; |
| 419 | }, |
| 406 | 420 | else => unreachable, |
| 407 | 421 | } else switch (mnemonic) { |
| 408 | 422 | .call => break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{ |