| ... | @@ -1691,10 +1691,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1691,10 +1691,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1691 | .register => |src_reg| { | 1691 | .register => |src_reg| { |
| 1692 | // for register, register use mr + 1 | 1692 | // for register, register use mr + 1 |
| 1693 | // addressing mode: *r/m16/32/64*, r16/32/64 | 1693 | // addressing mode: *r/m16/32/64*, r16/32/64 |
| 1694 | const operand_size = dst_ty.abiSize(self.target.*); | 1694 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1695 | const encoder = try X8664Encoder.init(self.code, 3); | 1695 | const encoder = try X8664Encoder.init(self.code, 3); |
| 1696 | encoder.rex(.{ | 1696 | encoder.rex(.{ |
| 1697 | .w = operand_size == 64, | 1697 | .w = abi_size == 8, |
| 1698 | .r = src_reg.isExtended(), | 1698 | .r = src_reg.isExtended(), |
| 1699 | .b = dst_reg.isExtended(), | 1699 | .b = dst_reg.isExtended(), |
| 1700 | }); | 1700 | }); |
| ... | @@ -1710,10 +1710,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1710,10 +1710,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1710 | // opx = 83: r/m16/32/64, imm8 | 1710 | // opx = 83: r/m16/32/64, imm8 |
| 1711 | const imm32 = @intCast(i32, imm); // This case must be handled before calling genX8664BinMathCode. | 1711 | const imm32 = @intCast(i32, imm); // This case must be handled before calling genX8664BinMathCode. |
| 1712 | if (imm32 <= math.maxInt(i8)) { | 1712 | if (imm32 <= math.maxInt(i8)) { |
| 1713 | const operand_size = dst_ty.abiSize(self.target.*); | 1713 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1714 | const encoder = try X8664Encoder.init(self.code, 4); | 1714 | const encoder = try X8664Encoder.init(self.code, 4); |
| 1715 | encoder.rex(.{ | 1715 | encoder.rex(.{ |
| 1716 | .w = operand_size == 64, | 1716 | .w = abi_size == 8, |
| 1717 | .b = dst_reg.isExtended(), | 1717 | .b = dst_reg.isExtended(), |
| 1718 | }); | 1718 | }); |
| 1719 | encoder.opcode_1byte(0x83); | 1719 | encoder.opcode_1byte(0x83); |
| ... | @@ -1723,10 +1723,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1723,10 +1723,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1723 | ); | 1723 | ); |
| 1724 | encoder.imm8(@intCast(i8, imm32)); | 1724 | encoder.imm8(@intCast(i8, imm32)); |
| 1725 | } else { | 1725 | } else { |
| 1726 | const operand_size = dst_ty.abiSize(self.target.*); | 1726 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1727 | const encoder = try X8664Encoder.init(self.code, 7); | 1727 | const encoder = try X8664Encoder.init(self.code, 7); |
| 1728 | encoder.rex(.{ | 1728 | encoder.rex(.{ |
| 1729 | .w = operand_size == 64, | 1729 | .w = abi_size == 8, |
| 1730 | .b = dst_reg.isExtended(), | 1730 | .b = dst_reg.isExtended(), |
| 1731 | }); | 1731 | }); |
| 1732 | encoder.opcode_1byte(0x81); | 1732 | encoder.opcode_1byte(0x81); |
| ... | @@ -1750,7 +1750,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1750,7 +1750,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1750 | } | 1750 | } |
| 1751 | const encoder = try X8664Encoder.init(self.code, 7); | 1751 | const encoder = try X8664Encoder.init(self.code, 7); |
| 1752 | encoder.rex(.{ | 1752 | encoder.rex(.{ |
| 1753 | .w = abi_size == 64, | 1753 | .w = abi_size == 8, |
| 1754 | .r = dst_reg.isExtended(), | 1754 | .r = dst_reg.isExtended(), |
| 1755 | }); | 1755 | }); |
| 1756 | encoder.opcode_1byte(mr + 3); | 1756 | encoder.opcode_1byte(mr + 3); |
| ... | @@ -1837,7 +1837,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1837,7 +1837,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1837 | const abi_size = dst_ty.abiSize(self.target.*); | 1837 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1838 | const encoder = try X8664Encoder.init(self.code, 4); | 1838 | const encoder = try X8664Encoder.init(self.code, 4); |
| 1839 | encoder.rex(.{ | 1839 | encoder.rex(.{ |
| 1840 | .w = abi_size == 64, | 1840 | .w = abi_size == 8, |
| 1841 | .r = dst_reg.isExtended(), | 1841 | .r = dst_reg.isExtended(), |
| 1842 | .b = src_reg.isExtended(), | 1842 | .b = src_reg.isExtended(), |
| 1843 | }); | 1843 | }); |
| ... | @@ -1866,7 +1866,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1866,7 +1866,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1866 | const abi_size = dst_ty.abiSize(self.target.*); | 1866 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1867 | const encoder = try X8664Encoder.init(self.code, 4); | 1867 | const encoder = try X8664Encoder.init(self.code, 4); |
| 1868 | encoder.rex(.{ | 1868 | encoder.rex(.{ |
| 1869 | .w = abi_size == 64, | 1869 | .w = abi_size == 8, |
| 1870 | .r = dst_reg.isExtended(), | 1870 | .r = dst_reg.isExtended(), |
| 1871 | .b = dst_reg.isExtended(), | 1871 | .b = dst_reg.isExtended(), |
| 1872 | }); | 1872 | }); |
| ... | @@ -1880,7 +1880,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1880,7 +1880,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1880 | const abi_size = dst_ty.abiSize(self.target.*); | 1880 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1881 | const encoder = try X8664Encoder.init(self.code, 7); | 1881 | const encoder = try X8664Encoder.init(self.code, 7); |
| 1882 | encoder.rex(.{ | 1882 | encoder.rex(.{ |
| 1883 | .w = abi_size == 64, | 1883 | .w = abi_size == 8, |
| 1884 | .r = dst_reg.isExtended(), | 1884 | .r = dst_reg.isExtended(), |
| 1885 | .b = dst_reg.isExtended(), | 1885 | .b = dst_reg.isExtended(), |
| 1886 | }); | 1886 | }); |
| ... | @@ -1923,7 +1923,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1923,7 +1923,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1923 | const abi_size = dst_ty.abiSize(self.target.*); | 1923 | const abi_size = dst_ty.abiSize(self.target.*); |
| 1924 | const encoder = try X8664Encoder.init(self.code, 4); | 1924 | const encoder = try X8664Encoder.init(self.code, 4); |
| 1925 | encoder.rex(.{ | 1925 | encoder.rex(.{ |
| 1926 | .w = abi_size == 64, | 1926 | .w = abi_size == 8, |
| 1927 | .r = dst_reg.isExtended(), | 1927 | .r = dst_reg.isExtended(), |
| 1928 | .b = src_reg.isExtended(), | 1928 | .b = src_reg.isExtended(), |
| 1929 | }); | 1929 | }); |
| ... | @@ -1965,7 +1965,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -1965,7 +1965,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1965 | const i_adj_off = -@intCast(i32, adj_off); | 1965 | const i_adj_off = -@intCast(i32, adj_off); |
| 1966 | const encoder = try X8664Encoder.init(self.code, 7); | 1966 | const encoder = try X8664Encoder.init(self.code, 7); |
| 1967 | encoder.rex(.{ | 1967 | encoder.rex(.{ |
| 1968 | .w = abi_size == 64, | 1968 | .w = abi_size == 8, |
| 1969 | .r = reg.isExtended(), | 1969 | .r = reg.isExtended(), |
| 1970 | }); | 1970 | }); |
| 1971 | encoder.opcode_1byte(opcode); | 1971 | encoder.opcode_1byte(opcode); |
| ... | @@ -3850,7 +3850,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3850,7 +3850,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3850 | const abi_size = ty.abiSize(self.target.*); | 3850 | const abi_size = ty.abiSize(self.target.*); |
| 3851 | const encoder = try X8664Encoder.init(self.code, 3); | 3851 | const encoder = try X8664Encoder.init(self.code, 3); |
| 3852 | encoder.rex(.{ | 3852 | encoder.rex(.{ |
| 3853 | .w = abi_size == 64, | 3853 | .w = abi_size == 8, |
| 3854 | .r = reg.isExtended(), | 3854 | .r = reg.isExtended(), |
| 3855 | .b = src_reg.isExtended(), | 3855 | .b = src_reg.isExtended(), |
| 3856 | }); | 3856 | }); |
| ... | @@ -3869,7 +3869,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3869,7 +3869,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3869 | // After we encode the instruction, we will know that the displacement bytes | 3869 | // After we encode the instruction, we will know that the displacement bytes |
| 3870 | // for [<offset>] will be at self.code.items.len - 4. | 3870 | // for [<offset>] will be at self.code.items.len - 4. |
| 3871 | encoder.rex(.{ | 3871 | encoder.rex(.{ |
| 3872 | .w = abi_size == 64, | 3872 | .w = abi_size == 8, |
| 3873 | .r = reg.isExtended(), | 3873 | .r = reg.isExtended(), |
| 3874 | }); | 3874 | }); |
| 3875 | encoder.opcode_1byte(0x8D); | 3875 | encoder.opcode_1byte(0x8D); |
| ... | @@ -3891,7 +3891,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3891,7 +3891,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3891 | | 3891 | |
| 3892 | // MOV reg, [reg] | 3892 | // MOV reg, [reg] |
| 3893 | encoder.rex(.{ | 3893 | encoder.rex(.{ |
| 3894 | .w = abi_size == 64, | 3894 | .w = abi_size == 8, |
| 3895 | .r = reg.isExtended(), | 3895 | .r = reg.isExtended(), |
| 3896 | .b = reg.isExtended(), | 3896 | .b = reg.isExtended(), |
| 3897 | }); | 3897 | }); |
| ... | @@ -3908,7 +3908,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3908,7 +3908,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3908 | const abi_size = ty.abiSize(self.target.*); | 3908 | const abi_size = ty.abiSize(self.target.*); |
| 3909 | const encoder = try X8664Encoder.init(self.code, 8); | 3909 | const encoder = try X8664Encoder.init(self.code, 8); |
| 3910 | encoder.rex(.{ | 3910 | encoder.rex(.{ |
| 3911 | .w = abi_size == 64, | 3911 | .w = abi_size == 8, |
| 3912 | .r = reg.isExtended(), | 3912 | .r = reg.isExtended(), |
| 3913 | }); | 3913 | }); |
| 3914 | encoder.opcode_1byte(0x8B); | 3914 | encoder.opcode_1byte(0x8B); |
| ... | @@ -3952,7 +3952,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3952,7 +3952,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3952 | const abi_size = ty.abiSize(self.target.*); | 3952 | const abi_size = ty.abiSize(self.target.*); |
| 3953 | const encoder = try X8664Encoder.init(self.code, 3); | 3953 | const encoder = try X8664Encoder.init(self.code, 3); |
| 3954 | encoder.rex(.{ | 3954 | encoder.rex(.{ |
| 3955 | .w = abi_size == 64, | 3955 | .w = abi_size == 8, |
| 3956 | .r = reg.isExtended(), | 3956 | .r = reg.isExtended(), |
| 3957 | .b = reg.isExtended(), | 3957 | .b = reg.isExtended(), |
| 3958 | }); | 3958 | }); |
| ... | @@ -3970,7 +3970,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { | ... | @@ -3970,7 +3970,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 3970 | const ioff = -@intCast(i32, off); | 3970 | const ioff = -@intCast(i32, off); |
| 3971 | const encoder = try X8664Encoder.init(self.code, 3); | 3971 | const encoder = try X8664Encoder.init(self.code, 3); |
| 3972 | encoder.rex(.{ | 3972 | encoder.rex(.{ |
| 3973 | .w = abi_size == 64, | 3973 | .w = abi_size == 8, |
| 3974 | .r = reg.isExtended(), | 3974 | .r = reg.isExtended(), |
| 3975 | }); | 3975 | }); |
| 3976 | encoder.opcode_1byte(0x8B); | 3976 | encoder.opcode_1byte(0x8B); |