xref: /aosp_15_r20/external/mesa3d/src/asahi/compiler/test/test-compact-constants.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2021 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include "agx_builder.h"
7*61046927SAndroid Build Coastguard Worker #include "agx_compiler.h"
8*61046927SAndroid Build Coastguard Worker #include "agx_test.h"
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #define CASE(instr, expected, size)                                            \
13*61046927SAndroid Build Coastguard Worker    INSTRUCTION_CASE(                                                           \
14*61046927SAndroid Build Coastguard Worker       {                                                                        \
15*61046927SAndroid Build Coastguard Worker          UNUSED agx_index out = agx_temp(b->shader, AGX_SIZE_##size);          \
16*61046927SAndroid Build Coastguard Worker          instr;                                                                \
17*61046927SAndroid Build Coastguard Worker          agx_unit_test(b, out);                                                \
18*61046927SAndroid Build Coastguard Worker       },                                                                       \
19*61046927SAndroid Build Coastguard Worker       {                                                                        \
20*61046927SAndroid Build Coastguard Worker          UNUSED agx_index out = agx_temp(b->shader, AGX_SIZE_##size);          \
21*61046927SAndroid Build Coastguard Worker          expected;                                                             \
22*61046927SAndroid Build Coastguard Worker          agx_unit_test(b, out);                                                \
23*61046927SAndroid Build Coastguard Worker       },                                                                       \
24*61046927SAndroid Build Coastguard Worker       agx_opt_compact_constants)
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #define NEGCASE(instr, size)    CASE(instr, instr, size)
27*61046927SAndroid Build Coastguard Worker #define CASE32(instr, expected) CASE(instr, expected, 32)
28*61046927SAndroid Build Coastguard Worker #define NEGCASE32(instr)        NEGCASE(instr, 32)
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker class CompactConstants : public testing::Test {
31*61046927SAndroid Build Coastguard Worker  protected:
CompactConstants()32*61046927SAndroid Build Coastguard Worker    CompactConstants()
33*61046927SAndroid Build Coastguard Worker    {
34*61046927SAndroid Build Coastguard Worker       mem_ctx = ralloc_context(NULL);
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker       wx = agx_register(0, AGX_SIZE_32);
37*61046927SAndroid Build Coastguard Worker    }
38*61046927SAndroid Build Coastguard Worker 
~CompactConstants()39*61046927SAndroid Build Coastguard Worker    ~CompactConstants()
40*61046927SAndroid Build Coastguard Worker    {
41*61046927SAndroid Build Coastguard Worker       ralloc_free(mem_ctx);
42*61046927SAndroid Build Coastguard Worker    }
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker    void *mem_ctx;
45*61046927SAndroid Build Coastguard Worker    agx_index wx;
46*61046927SAndroid Build Coastguard Worker };
47*61046927SAndroid Build Coastguard Worker 
TEST_F(CompactConstants,FP32)48*61046927SAndroid Build Coastguard Worker TEST_F(CompactConstants, FP32)
49*61046927SAndroid Build Coastguard Worker {
50*61046927SAndroid Build Coastguard Worker    CASE32(agx_fadd_to(b, out, wx, agx_mov_imm(b, 32, fui(32768.0))),
51*61046927SAndroid Build Coastguard Worker           agx_fadd_to(b, out, wx, agx_mov_imm(b, 16, 0x7800)));
52*61046927SAndroid Build Coastguard Worker }
53*61046927SAndroid Build Coastguard Worker 
TEST_F(CompactConstants,InexactFP32)54*61046927SAndroid Build Coastguard Worker TEST_F(CompactConstants, InexactFP32)
55*61046927SAndroid Build Coastguard Worker {
56*61046927SAndroid Build Coastguard Worker    NEGCASE32(agx_fadd_to(b, out, wx, agx_mov_imm(b, 32, fui(32769.0))));
57*61046927SAndroid Build Coastguard Worker }
58