summaryrefslogtreecommitdiff
path: root/src/amd/compiler/aco_print_asm.cpp
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2020-10-01 10:12:44 +0200
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>2020-10-02 14:21:31 +0200
commit01704dd1a41c398795f359cb6372a2a0771cc8d0 (patch)
treec470316f6e265b33acb8b051e6fad83bc56a7f9e /src/amd/compiler/aco_print_asm.cpp
parentc9192d1083e609e2299cd6a0e58494582ad01e22 (diff)
downloadmesa-01704dd1a41c398795f359cb6372a2a0771cc8d0.tar.gz
aco: apply the clamped integer addition disassembly workaround for v_add3
LLVM fails to disassemble v_add3 + clamp. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3563 Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6961>
Diffstat (limited to 'src/amd/compiler/aco_print_asm.cpp')
-rw-r--r--src/amd/compiler/aco_print_asm.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/amd/compiler/aco_print_asm.cpp b/src/amd/compiler/aco_print_asm.cpp
index b9a6226fb7a..1e818147f1b 100644
--- a/src/amd/compiler/aco_print_asm.cpp
+++ b/src/amd/compiler/aco_print_asm.cpp
@@ -164,7 +164,9 @@ void print_asm(Program *program, std::vector<uint32_t>& binary,
if (!l &&
((program->chip_class >= GFX9 && (binary[pos] & 0xffff8000) == 0xd1348000) || /* v_add_u32_e64 + clamp */
(program->chip_class >= GFX10 && (binary[pos] & 0xffff8000) == 0xd7038000) || /* v_add_u16_e64 + clamp */
- (program->chip_class <= GFX9 && (binary[pos] & 0xffff8000) == 0xd1268000)) /* v_add_u16_e64 + clamp */) {
+ (program->chip_class <= GFX9 && (binary[pos] & 0xffff8000) == 0xd1268000) || /* v_add_u16_e64 + clamp */
+ (program->chip_class >= GFX10 && (binary[pos] & 0xffff8000) == 0xd76d8000) || /* v_add3_u32 + clamp */
+ (program->chip_class == GFX9 && (binary[pos] & 0xffff8000) == 0xd1ff8000)) /* v_add3_u32 + clamp */) {
out << "\tinteger addition + clamp";
bool has_literal = program->chip_class >= GFX10 &&
(((binary[pos+1] & 0x1ff) == 0xff) || (((binary[pos+1] >> 9) & 0x1ff) == 0xff));