mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-06-13 16:37:04 +08:00
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
"""Tests for VINTERP instructions."""
|
|
import unittest
|
|
from test.amd.hw.helpers import *
|
|
|
|
class TestVInterp(unittest.TestCase):
|
|
def test_v_interp_p10_f32(self):
|
|
instructions = [
|
|
v_mov_b32_e32(v[10], v[255]),
|
|
v_cvt_f32_u32_e32(v[1], v[10]),
|
|
s_mov_b32(s[0], f2i(100.0)),
|
|
v_add_f32_e32(v[1], s[0], v[1]),
|
|
v_cvt_f32_u32_e32(v[3], v[10]),
|
|
s_mov_b32(s[1], f2i(10.0)),
|
|
v_add_f32_e32(v[3], s[1], v[3]),
|
|
s_mov_b32(s[2], f2i(2.0)),
|
|
v_interp_p10_f32(v[4], v[1], s[2], v[3]),
|
|
]
|
|
st = run_program(instructions, n_lanes=8)
|
|
for lane in range(4): self.assertAlmostEqual(i2f(st.vgpr[lane][4]), 212.0, places=5)
|
|
for lane in range(4, 8): self.assertAlmostEqual(i2f(st.vgpr[lane][4]), 224.0, places=5)
|
|
|
|
def test_v_interp_p10_f16_f32(self):
|
|
instructions = [
|
|
v_mov_b32_e32(v[10], v[255]),
|
|
v_cvt_f32_u32_e32(v[11], v[10]),
|
|
v_cvt_f16_f32_e32(v[1], v[11]),
|
|
s_mov_b32(s[0], f2i(10.0)),
|
|
v_add_f32_e32(v[12], s[0], v[11]),
|
|
v_cvt_f16_f32_e32(v[3], v[12]),
|
|
s_mov_b32(s[1], f2i(2.0)),
|
|
v_interp_p10_f16_f32(v[4], v[1], s[1], v[3]),
|
|
]
|
|
st = run_program(instructions, n_lanes=8)
|
|
for lane in range(4): self.assertAlmostEqual(i2f(st.vgpr[lane][4]), 12.0, places=5)
|
|
for lane in range(4, 8): self.assertAlmostEqual(i2f(st.vgpr[lane][4]), 24.0, places=5)
|