diff --git a/test/backend/test_encodings.py b/test/backend/test_encodings.py index 38e1373beb..bd4dd8c535 100644 --- a/test/backend/test_encodings.py +++ b/test/backend/test_encodings.py @@ -100,13 +100,6 @@ class TestEncodingsX86(unittest.TestCase): # vaddss xmm0, xmm0, xmm8 self.assertEqual(bytes.fromhex(self.encode(add)), bytes.fromhex("C4 C1 7A 58 C0")) - # test ymm encoding - def test_ymm_encoding(self): - xmm0, xmm1 = def_reg(dtypes._uint256, XMM[0]), def_reg(dtypes._uint256, XMM[1]) - add = ins(X86Ops.VADDPS, dtypes._uint256, (xmm0, xmm1), XMM[0]) - # vaddps ymm0, ymm0, ymm1 - self.assertEqual(bytes.fromhex(self.encode(add)), bytes.fromhex("C5 FC 58 C1")) - # test encoding where register is in the immediate field def test_reg_in_imm_field(self): xmm0, xmm1, xmm2 = def_reg(dtypes.float32, XMM[0]), def_reg(dtypes.float32, XMM[1]), def_reg(dtypes.float32, XMM[2]) diff --git a/tinygrad/dtype.py b/tinygrad/dtype.py index 31891c5e85..8d586d2c04 100644 --- a/tinygrad/dtype.py +++ b/tinygrad/dtype.py @@ -120,8 +120,6 @@ class DTypes: uint32: Final[DType] = DType.new(6, 32, "unsigned int", 'I') int64: Final[DType] = DType.new(7, 64, "long", 'q') uint64: Final[DType] = DType.new(8, 64, "unsigned long", 'Q') - _uint128: Final[DType] = DType.new(8, 128, "uint128", None) - _uint256: Final[DType] = DType.new(8, 256, "uint256", None) weakfloat: Final[DType] = DType.new(9, 800, "weakfloat", None) fp8e4m3: Final[DType] = DType.new(10, 8, "float8_e4m3", None) fp8e5m2: Final[DType] = DType.new(11, 8, "float8_e5m2", None) diff --git a/tinygrad/renderer/isa/x86.py b/tinygrad/renderer/isa/x86.py index a542071a1f..0b67a6da60 100644 --- a/tinygrad/renderer/isa/x86.py +++ b/tinygrad/renderer/isa/x86.py @@ -220,7 +220,7 @@ CALLEE_SAVED = (RBX, RBP, GPR[12], GPR[13], GPR[14], GPR[15]) + ((RSI, RDI) + XM reg_strs = {"rax": {4:"eax", 2:"ax", 1:"al"}, "rcx": {4:"ecx", 2:"cx", 1:"cl"}, "rdx": {4:"edx", 2:"dx", 1:"dl"}, "rbx": {4:"ebx", 2:"bx", 1:"bl"}, "rsp": {4:"esp", 2:"sp", 1:"spl"}, "rbp": {4:"ebp", 2:"bp", 1:"bpl"}, "rsi": {4:"esi", 2:"si", 1:"sil"}, "rdi": {4:"edi", 2:"di", 1:"dil"}, - **{f"r{i}": {4:f"r{i}d", 2:f"r{i}w", 1:f"r{i}b"} for i in range(8, 16)}, **{f"xmm{i}": {64:f"zmm{i}", 32:f"ymm{i}"} for i in range(16)}} + **{f"r{i}": {4:f"r{i}d", 2:f"r{i}w", 1:f"r{i}b"} for i in range(8, 16)}} # ***** X86 instruction selection ***** def base(x:UOp, i:int) -> UOp: return s.src[0] if (s:=x.src[i]).op is Ops.INDEX else s @@ -636,9 +636,8 @@ def encode(x:UOp, opc:int, reg:int|None=None, pp:int=0, sel:int=0, we:int=0) -> r, _x, b = reg >> 3, idx >> 3, rm >> 3 if sel: # VEX bytes vvvv = cast(Register, greg(vvvv_uop)).index if vvvv_uop is not None else 0 - l = (max(reg_sz, rm_sz) > 16) & 0b1 - if sel == 1 and _x == b == we == 0: inst += bytes([0xC5, (~r & 0b1) << 7 | (~vvvv & 0b1111) << 3 | l << 2 | pp]) - else: inst += bytes([0xC4, (~r & 0b1) << 7 | (~_x & 0b1) << 6 | (~b & 0b1) << 5 | sel, we << 7 | (~vvvv & 0b1111) << 3 | l << 2 | pp]) + if sel == 1 and _x == b == we == 0: inst += bytes([0xC5, (~r & 0b1) << 7 | (~vvvv & 0b1111) << 3 | pp]) + else: inst += bytes([0xC4, (~r & 0b1) << 7 | (~_x & 0b1) << 6 | (~b & 0b1) << 5 | sel, we << 7 | (~vvvv & 0b1111) << 3 | pp]) else: # optional PREFIX and REX bytes # PREFIX byte signaling 16 bit variant of instruction if sz == 2: inst += bytes([0x66])