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