blob: 16848bc8a6d0d2b3b3253d0697f041209c2e58b2 [file] [log] [blame]
/*
* Copyright 2021 Collabora, Ltd.
* SPDX-License-Identifier: MIT
*/
#include "agx_builder.h"
#include "agx_compiler.h"
#include "agx_test.h"
#include <gtest/gtest.h>
#define CASE(instr, expected, size) \
INSTRUCTION_CASE( \
{ \
UNUSED agx_index out = agx_temp(b->shader, AGX_SIZE_##size); \
instr; \
agx_unit_test(b, out); \
}, \
{ \
UNUSED agx_index out = agx_temp(b->shader, AGX_SIZE_##size); \
expected; \
agx_unit_test(b, out); \
}, \
agx_opt_compact_constants)
#define NEGCASE(instr, size) CASE(instr, instr, size)
#define CASE32(instr, expected) CASE(instr, expected, 32)
#define NEGCASE32(instr) NEGCASE(instr, 32)
class CompactConstants : public testing::Test {
protected:
CompactConstants()
{
mem_ctx = ralloc_context(NULL);
wx = agx_register(0, AGX_SIZE_32);
}
~CompactConstants()
{
ralloc_free(mem_ctx);
}
void *mem_ctx;
agx_index wx;
};
TEST_F(CompactConstants, FP32)
{
CASE32(agx_fadd_to(b, out, wx, agx_mov_imm(b, 32, fui(32768.0))),
agx_fadd_to(b, out, wx, agx_mov_imm(b, 16, 0x7800)));
}
TEST_F(CompactConstants, InexactFP32)
{
NEGCASE32(agx_fadd_to(b, out, wx, agx_mov_imm(b, 32, fui(32769.0))));
}