From d85657e5f2191bd9ca444dd4d2035a990fab8d37 Mon Sep 17 00:00:00 2001 From: "Galantsev, Dmitrii" Date: Mon, 24 Jun 2024 17:55:37 -0500 Subject: [PATCH] SWDEV-452795 - Disable RAS plugin, fix XGMI RAS plugin loaded rocm-smi which is in conflict with amd-smi library Main source of grief was the map 'devInfoTypesStrings' that is defined in both rocm-smi and amd-smi We assume that rocm-smi would get lazy-loaded by RAS library and overwrite symbols defined in amd-smi. devInfoTypesStrings in rocm-smi contains different number of elements, the enums are also different. RDC relies on amd-smi's enums. One such enum is kDevGpuMetrics: rocm-smi: kDevGpuMetrics = 68 amd-smi: kDevGpuMetrics = 75 Example of overlapping map definitions: $ objdump --dynamic-syms /opt/rocm/lib/libamd_smi.so | grep devInfoTypesStrings 00000000003c4980 g DO .data.rel.ro0000000000000008 Base devInfoTypesStrings 00000000003db830 g DO .bss0000000000000030 Base _ZN3amd3smi6Device19devInfoTypesStringsE $ objdump --dynamic-syms /opt/rocm/lib/librocm_smi64.so | grep devInfoTypesStrings 00000000003dc590 g DO .bss0000000000000030 Base _ZN3amd3smi6Device19devInfoTypesStringsE 00000000003c9c68 g DO .data.rel.ro0000000000000008 Base devInfoTypesStrings Change-Id: Ib2f2db32b6abd7ebe84e7807c25581461eb86bae Signed-off-by: Galantsev, Dmitrii --- CMakeLists.txt | 48 - cmake_modules/rdc-backward-compat.cmake | 2 - common/rdc_field.data | 74 +- include/rdc/rdc.h | 88 +- include/rdc_lib/RdcDiagnosticLibInterface.h | 2 +- include/rdc_lib/RdcTelemetryLibInterface.h | 2 +- include/rdc_lib/impl/RdcMetricFetcherImpl.h | 3 +- include/rdc_lib/impl/RdcRasLib.h | 89 - include/rdc_lib/impl/RdcTelemetryModule.h | 1 - ras_prebuild/config/arcturus.json | 5680 ----------------- ras_prebuild/config/config.json | 26 - ras_prebuild/config/sienna_cichlid.json | 34 - ras_prebuild/config/vega20.json | 4393 ------------- ras_prebuild/librdc_ras.so | Bin 2691361 -> 0 bytes .../gc_edc_sqc_inst_bank_snop.bin | Bin 4084 -> 0 bytes .../gc_edc_sqc_inst_bank_snop.sp3 | 31 - .../arcturus/gc_clear_vgpr_lds_arcturus.sp3 | 42 - .../sp3/gfx9/edc/arcturus/gc_edc_compute.sp3 | 113 - .../sp3/gfx9/edc/arcturus/gc_edc_cp_sq.sp3 | 59 - .../edc/arcturus/gc_edc_cp_sq_gds_read.sp3 | 60 - .../edc/arcturus/gc_edc_cs_trap_handler.sp3 | 673 -- .../gfx9/edc/arcturus/gc_edc_dc_restore.sp3 | 21 - .../sp3/gfx9/edc/arcturus/gc_edc_ea.sp3 | 69 - .../sp3/gfx9/edc/arcturus/gc_edc_ea_02.sp3 | 131 - .../sp3/gfx9/edc/arcturus/gc_edc_ea_dirty.sp3 | 61 - .../sp3/gfx9/edc/arcturus/gc_edc_gds_02.sp3 | 79 - .../gfx9/edc/arcturus/gc_edc_gds_address1.sp3 | 55 - .../gfx9/edc/arcturus/gc_edc_gds_oa_phy.sp3 | 68 - .../sp3/gfx9/edc/arcturus/gc_edc_lds_02.sp3 | 79 - .../gfx9/edc/arcturus/gc_edc_lds_address1.sp3 | 55 - .../sp3/gfx9/edc/arcturus/gc_edc_mc_read.sp3 | 52 - .../edc/arcturus/gc_edc_mc_read_tcc_halt.sp3 | 77 - .../gfx9/edc/arcturus/gc_edc_no_pollute.sp3 | 51 - .../sp3/gfx9/edc/arcturus/gc_edc_sgpr_02.sp3 | 55 - .../sp3/gfx9/edc/arcturus/gc_edc_sh_atcl1.sp3 | 75 - .../edc/arcturus/gc_edc_sqc_data_bank.sp3 | 96 - .../edc/arcturus/gc_edc_sqc_data_bank_tag.sp3 | 96 - .../edc/arcturus/gc_edc_sqc_dirty_bit.sp3 | 112 - .../edc/arcturus/gc_edc_sqc_inst_atcl1.sp3 | 63 - .../edc/arcturus/gc_edc_sqc_inst_bank.sp3 | 69 - .../arcturus/gc_edc_sqc_inst_bank_snop.sp3 | 29 - .../gfx9/edc/arcturus/gc_edc_ta_address1.sp3 | 51 - .../sp3/gfx9/edc/arcturus/gc_edc_tc_02.sp3 | 73 - .../sp3/gfx9/edc/arcturus/gc_edc_tc_02_ea.sp3 | 71 - .../gfx9/edc/arcturus/gc_edc_tc_atomic_02.sp3 | 345 - .../gfx9/edc/arcturus/gc_edc_tc_atomic_03.sp3 | 509 -- .../gfx9/edc/arcturus/gc_edc_tc_atomic_04.sp3 | 2816 -------- .../arcturus/gc_edc_tcc_return_control.sp3 | 1019 --- .../gfx9/edc/arcturus/gc_edc_tcp_atcl1.sp3 | 80 - .../edc/arcturus/gc_edc_tcp_utcl1_fifo1.sp3 | 80 - .../arcturus/gc_edc_utc_vmwalker_pde_02.sp3 | 72 - .../arcturus/gc_edc_utc_vmwalker_pde_03.sp3 | 72 - .../sp3/gfx9/edc/arcturus/gc_edc_vgpr.sp3 | 47 - .../sp3/gfx9/edc/arcturus/gc_edc_vgpr_01.sp3 | 54 - .../sp3/gfx9/edc/arcturus/gc_edc_vgpr_02.sp3 | 54 - .../gfx9/edc/arcturus/gc_edc_vgpr_clear.sp3 | 75 - .../arcturus/gc_wf_lifetime_cs_pm4_01_cs.sp3 | 58 - .../arcturus/gc_clear_vgpr_lds_arcturus.bin | Bin 2232 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_compute.bin | Bin 2396 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin | Bin 152 -> 0 bytes .../bin/arcturus/gc_edc_cp_sq_gds_read.bin | Bin 156 -> 0 bytes .../bin/arcturus/gc_edc_cs_trap_handler.bin | Bin 1548 -> 0 bytes .../edc/bin/arcturus/gc_edc_dc_restore.bin | Bin 108 -> 0 bytes .../sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin | Bin 216 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_ea_02.bin | Bin 592 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin | Bin 176 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_gds_02.bin | Bin 236 -> 0 bytes .../edc/bin/arcturus/gc_edc_gds_address1.bin | Bin 148 -> 0 bytes .../edc/bin/arcturus/gc_edc_gds_oa_phy.bin | Bin 244 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_lds_02.bin | Bin 236 -> 0 bytes .../edc/bin/arcturus/gc_edc_lds_address1.bin | Bin 148 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_mc_read.bin | Bin 128 -> 0 bytes .../bin/arcturus/gc_edc_mc_read_tcc_halt.bin | Bin 208 -> 0 bytes .../edc/bin/arcturus/gc_edc_no_pollute.bin | Bin 128 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_sgpr_02.bin | Bin 136 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin | Bin 156 -> 0 bytes .../edc/bin/arcturus/gc_edc_sqc_data_bank.bin | Bin 192 -> 0 bytes .../bin/arcturus/gc_edc_sqc_data_bank_tag.bin | Bin 192 -> 0 bytes .../edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin | Bin 324 -> 0 bytes .../bin/arcturus/gc_edc_sqc_inst_atcl1.bin | Bin 139380 -> 0 bytes .../edc/bin/arcturus/gc_edc_sqc_inst_bank.bin | Bin 1388 -> 0 bytes .../arcturus/gc_edc_sqc_inst_bank_snop.bin | Bin 4044 -> 0 bytes .../edc/bin/arcturus/gc_edc_ta_address1.bin | Bin 128 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_tc_02.bin | Bin 208 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_tc_02_ea.bin | Bin 188 -> 0 bytes .../edc/bin/arcturus/gc_edc_tc_atomic_02.bin | Bin 2148 -> 0 bytes .../edc/bin/arcturus/gc_edc_tc_atomic_03.bin | Bin 3336 -> 0 bytes .../edc/bin/arcturus/gc_edc_tc_atomic_04.bin | Bin 20600 -> 0 bytes .../arcturus/gc_edc_tcc_return_control.bin | Bin 7268 -> 0 bytes .../edc/bin/arcturus/gc_edc_tcp_atcl1.bin | Bin 168 -> 0 bytes .../bin/arcturus/gc_edc_tcp_utcl1_fifo1.bin | Bin 216 -> 0 bytes .../arcturus/gc_edc_utc_vmwalker_pde_02.bin | Bin 188 -> 0 bytes .../arcturus/gc_edc_utc_vmwalker_pde_03.bin | Bin 188 -> 0 bytes .../sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr.bin | Bin 116 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_vgpr_01.bin | Bin 136 -> 0 bytes .../gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin | Bin 136 -> 0 bytes .../edc/bin/arcturus/gc_edc_vgpr_clear.bin | Bin 4340 -> 0 bytes .../arcturus/gc_wf_lifetime_cs_pm4_01_cs.bin | Bin 152 -> 0 bytes .../bin/vega20/gc_clear_vgpr_lds_arcturus.bin | 0 .../gfx9/edc/bin/vega20/gc_edc_compute.bin | 0 .../sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq.bin | Bin 152 -> 0 bytes .../edc/bin/vega20/gc_edc_cp_sq_gds_read.bin | Bin 156 -> 0 bytes .../edc/bin/vega20/gc_edc_cs_trap_handler.bin | Bin 1548 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_dc_restore.bin | Bin 108 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin | Bin 216 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin | Bin 592 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin | Bin 176 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin | Bin 236 -> 0 bytes .../edc/bin/vega20/gc_edc_gds_address1.bin | Bin 148 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin | Bin 244 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin | Bin 236 -> 0 bytes .../edc/bin/vega20/gc_edc_lds_address1.bin | Bin 148 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_mc_read.bin | Bin 128 -> 0 bytes .../bin/vega20/gc_edc_mc_read_tcc_halt.bin | Bin 208 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_no_pollute.bin | Bin 128 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin | Bin 136 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin | Bin 156 -> 0 bytes .../edc/bin/vega20/gc_edc_sqc_data_bank.bin | Bin 192 -> 0 bytes .../bin/vega20/gc_edc_sqc_data_bank_tag.bin | Bin 192 -> 0 bytes .../edc/bin/vega20/gc_edc_sqc_dirty_bit.bin | Bin 324 -> 0 bytes .../edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin | Bin 139380 -> 0 bytes .../edc/bin/vega20/gc_edc_sqc_inst_bank.bin | Bin 1388 -> 0 bytes .../bin/vega20/gc_edc_sqc_inst_bank_snop.bin | Bin 4044 -> 0 bytes .../edc/bin/vega20/gc_edc_ta_address1.bin | Bin 128 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin | Bin 208 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin | Bin 188 -> 0 bytes .../edc/bin/vega20/gc_edc_tc_atomic_02.bin | Bin 2148 -> 0 bytes .../edc/bin/vega20/gc_edc_tc_atomic_03.bin | Bin 3336 -> 0 bytes .../edc/bin/vega20/gc_edc_tc_atomic_04.bin | Bin 20600 -> 0 bytes .../bin/vega20/gc_edc_tcc_return_control.bin | Bin 7268 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin | Bin 168 -> 0 bytes .../edc/bin/vega20/gc_edc_tcp_utcl1_fifo1.bin | Bin 216 -> 0 bytes .../bin/vega20/gc_edc_utc_vmwalker_pde_02.bin | Bin 188 -> 0 bytes .../bin/vega20/gc_edc_utc_vmwalker_pde_03.bin | Bin 188 -> 0 bytes .../sp3/gfx9/edc/bin/vega20/gc_edc_vgpr.bin | Bin 116 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_vgpr_01.bin | Bin 136 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin | Bin 136 -> 0 bytes .../gfx9/edc/bin/vega20/gc_edc_vgpr_clear.bin | 0 .../vega20/gc_wf_lifetime_cs_pm4_01_cs.bin | Bin 152 -> 0 bytes .../sp3/gfx9/edc/vega20/gc_edc_cp_sq.sp3 | 59 - .../gfx9/edc/vega20/gc_edc_cp_sq_gds_read.sp3 | 60 - .../edc/vega20/gc_edc_cs_trap_handler.sp3 | 673 -- .../sp3/gfx9/edc/vega20/gc_edc_dc_restore.sp3 | 21 - .../sp3/gfx9/edc/vega20/gc_edc_ea.sp3 | 69 - .../sp3/gfx9/edc/vega20/gc_edc_ea_02.sp3 | 131 - .../sp3/gfx9/edc/vega20/gc_edc_ea_dirty.sp3 | 61 - .../sp3/gfx9/edc/vega20/gc_edc_gds_02.sp3 | 79 - .../gfx9/edc/vega20/gc_edc_gds_address1.sp3 | 55 - .../sp3/gfx9/edc/vega20/gc_edc_gds_oa_phy.sp3 | 68 - .../sp3/gfx9/edc/vega20/gc_edc_lds_02.sp3 | 79 - .../gfx9/edc/vega20/gc_edc_lds_address1.sp3 | 55 - .../sp3/gfx9/edc/vega20/gc_edc_mc_read.sp3 | 52 - .../edc/vega20/gc_edc_mc_read_tcc_halt.sp3 | 77 - .../sp3/gfx9/edc/vega20/gc_edc_no_pollute.sp3 | 51 - .../sp3/gfx9/edc/vega20/gc_edc_sgpr_02.sp3 | 55 - .../sp3/gfx9/edc/vega20/gc_edc_sh_atcl1.sp3 | 75 - .../gfx9/edc/vega20/gc_edc_sqc_data_bank.sp3 | 96 - .../edc/vega20/gc_edc_sqc_data_bank_tag.sp3 | 96 - .../gfx9/edc/vega20/gc_edc_sqc_dirty_bit.sp3 | 112 - .../gfx9/edc/vega20/gc_edc_sqc_inst_atcl1.sp3 | 63 - .../gfx9/edc/vega20/gc_edc_sqc_inst_bank.sp3 | 69 - .../edc/vega20/gc_edc_sqc_inst_bank_snop.sp3 | 29 - .../gfx9/edc/vega20/gc_edc_ta_address1.sp3 | 51 - .../sp3/gfx9/edc/vega20/gc_edc_tc_02.sp3 | 73 - .../sp3/gfx9/edc/vega20/gc_edc_tc_02_ea.sp3 | 71 - .../gfx9/edc/vega20/gc_edc_tc_atomic_02.sp3 | 345 - .../gfx9/edc/vega20/gc_edc_tc_atomic_03.sp3 | 509 -- .../gfx9/edc/vega20/gc_edc_tc_atomic_04.sp3 | 2816 -------- .../edc/vega20/gc_edc_tcc_return_control.sp3 | 1019 --- .../sp3/gfx9/edc/vega20/gc_edc_tcp_atcl1.sp3 | 80 - .../edc/vega20/gc_edc_tcp_utcl1_fifo1.sp3 | 80 - .../edc/vega20/gc_edc_utc_vmwalker_pde_02.sp3 | 72 - .../edc/vega20/gc_edc_utc_vmwalker_pde_03.sp3 | 72 - .../sp3/gfx9/edc/vega20/gc_edc_vgpr.sp3 | 47 - .../sp3/gfx9/edc/vega20/gc_edc_vgpr_01.sp3 | 54 - .../sp3/gfx9/edc/vega20/gc_edc_vgpr_02.sp3 | 54 - .../vega20/gc_wf_lifetime_cs_pm4_01_cs.sp3 | 58 - rdc_libs/rdc/CMakeLists.txt | 2 - rdc_libs/rdc/src/RdcMetricFetcherImpl.cc | 153 +- rdc_libs/rdc/src/RdcModuleMgrImpl.cc | 3 +- rdc_libs/rdc/src/RdcRasLib.cc | 178 - rdc_libs/rdc/src/RdcSmiLib.cc | 50 +- rdc_libs/rdc/src/RdcTelemetryModule.cc | 2 +- tests/rdc_tests/CMakeLists.txt | 1 - 184 files changed, 277 insertions(+), 25987 deletions(-) delete mode 100644 include/rdc_lib/impl/RdcRasLib.h delete mode 100644 ras_prebuild/config/arcturus.json delete mode 100644 ras_prebuild/config/config.json delete mode 100644 ras_prebuild/config/sienna_cichlid.json delete mode 100644 ras_prebuild/config/vega20.json delete mode 100755 ras_prebuild/librdc_ras.so delete mode 100644 ras_prebuild/sp3/gfx10/edc/bin/sienna_cichlid/gc_edc_sqc_inst_bank_snop.bin delete mode 100644 ras_prebuild/sp3/gfx10/edc/sienna_cichlid/gc_edc_sqc_inst_bank_snop.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_clear_vgpr_lds_arcturus.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_compute.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq_gds_read.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cs_trap_handler.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_dc_restore.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_dirty.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_oa_phy.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read_tcc_halt.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_no_pollute.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sgpr_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sh_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank_tag.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_dirty_bit.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank_snop.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ta_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02_ea.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_03.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_04.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcc_return_control.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_utcl1_fifo1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_03.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_01.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_clear.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/arcturus/gc_wf_lifetime_cs_pm4_01_cs.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_clear_vgpr_lds_arcturus.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq_gds_read.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cs_trap_handler.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read_tcc_halt.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_no_pollute.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sgpr_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ta_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02_ea.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_03.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_04.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tcc_return_control.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_utcl1_fifo1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_03.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_01.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_clear.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_wf_lifetime_cs_pm4_01_cs.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_clear_vgpr_lds_arcturus.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_compute.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq_gds_read.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cs_trap_handler.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read_tcc_halt.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_no_pollute.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ta_address1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_03.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_04.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tcc_return_control.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tcp_utcl1_fifo1.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_utc_vmwalker_pde_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_utc_vmwalker_pde_03.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_01.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_clear.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_wf_lifetime_cs_pm4_01_cs.bin delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq_gds_read.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cs_trap_handler.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_dc_restore.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_dirty.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_oa_phy.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read_tcc_halt.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_no_pollute.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sgpr_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sh_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank_tag.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_dirty_bit.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank_snop.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ta_address1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02_ea.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_03.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_04.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcc_return_control.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_atcl1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_utcl1_fifo1.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_03.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_01.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_02.sp3 delete mode 100644 ras_prebuild/sp3/gfx9/edc/vega20/gc_wf_lifetime_cs_pm4_01_cs.sp3 delete mode 100644 rdc_libs/rdc/src/RdcRasLib.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index c46a9a7bc5..d9652d2728 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,10 +44,6 @@ message("Package version: ${VERSION_STRING}") # which requires the gRPC option(BUILD_STANDALONE "Build targets for rdci and rdcd" ON) -# When cmake -DBUILD_RASLIB=off, it will not build the raslib -# which requires the ROCT-Thunk-Interface. -option(BUILD_RASLIB "Build targets for raslib" OFF) - # When cmake -DBUILD_RUNTIME=off, it will not build the librdc_rocr.so # which requires the Rocm run time. option(BUILD_RUNTIME "Build targets for librdc_rocr.so" ON) @@ -149,12 +145,6 @@ if(BUILD_STANDALONE AND GRPC_ROOT STREQUAL GRPC_ROOT_DEFAULT) Continuing without gRPC install") endif() -if(NOT EXISTS "${CMAKE_SOURCE_DIR}/raslib/.git" AND BUILD_RASLIB) - message(FATAL_ERROR "The git submodule raslib is not available. Please run - git submodule update --init --recursive - If you do not want to build raslib, use cmake -DBUILD_RASLIB=off") -endif() - find_package(SMI NAMES amd_smi HINTS ${ROCM_DIR}/lib/cmake @@ -167,12 +157,6 @@ if(NOT EXISTS "${SMI_INC_DIR}" OR NOT EXISTS "${SMI_LIB_DIR}") make sure amd_smi is installed and present in ${SMI_INC_DIR}.") endif() -if(BUILD_RASLIB AND NOT DEFINED HSA_DIR) - message(FATAL_ERROR "Please specify libhsakmt directory which is required by raslib - cmake -DHSA_DIR= - If you do not want to build raslib, use cmake -DBUILD_RASLIB=off") -endif() - set(${RDC}_VERSION_MAJOR "${VERSION_MAJOR}") set(${RDC}_VERSION_MINOR "${VERSION_MINOR}") set(${RDC}_VERSION_PATCH "0") @@ -315,20 +299,6 @@ if(BUILD_STANDALONE) endif() endif() -# Raslib -if(BUILD_RASLIB) - message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") - message(" Build raslib") - message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") - - add_subdirectory("raslib") -else() - add_library(rdc_ras INTERFACE - ${PROJECT_SOURCE_DIR}/ras_prebuild/librdc_ras.so) - # needed for copying the pre-built library - get_target_property(RAS_SOURCES rdc_ras SOURCES) -endif() - # Folders for both standalone and embedded add_subdirectory("rdc_libs") @@ -377,24 +347,6 @@ install(DIRECTORY ${PROJECT_SOURCE_DIR}/example DESTINATION ${RDC_SHARE_INSTALL_PREFIX} COMPONENT dev) -# Prebuild packages to install -install(PROGRAMS ${RAS_SOURCES} - DESTINATION ${CMAKE_INSTALL_LIBDIR}/${RDC} - COMPONENT ${CLIENT_COMPONENT}) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/ras_prebuild/config - DESTINATION ${CMAKE_INSTALL_DATADIR}/${RDC} - COMPONENT ${CLIENT_COMPONENT}) -# Don't sp3 grpc install because it floods the terminal -set(OLD_CMAKE_INSTALL_MESSAGE ${CMAKE_INSTALL_MESSAGE}) -set(CMAKE_INSTALL_MESSAGE NEVER) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/ras_prebuild/sp3 - DESTINATION ${CMAKE_INSTALL_LIBDIR}/${RDC} - COMPONENT ${CLIENT_COMPONENT}) -# Restore printing verbosity -set(CMAKE_INSTALL_MESSAGE ${OLD_CMAKE_INSTALL_MESSAGE}) -unset(OLD_CMAKE_INSTALL_MESSAGE) - - #Identify between SLES and Centos for setting symlink for rdc.service #SLES need serice file in /usr/lib/systemd/system/rdc.service #CENTOS/RHEL Require file in /lib/systemd/system/rdc.service diff --git a/cmake_modules/rdc-backward-compat.cmake b/cmake_modules/rdc-backward-compat.cmake index ed3fb50484..f0af2f00ba 100644 --- a/cmake_modules/rdc-backward-compat.cmake +++ b/cmake_modules/rdc-backward-compat.cmake @@ -59,13 +59,11 @@ function(create_library_symlink) # Symlink for private libraries set(LIB_RDC_ROCR "librdc_rocr.so") set(LIB_RDC_ROCP "librdc_rocp.so") - set(LIB_RDC_RAS "librdc_ras.so") set(LIB_RDC_RVS "librdc_rvs.so") set(LIB_RDC_CLIENT_SMI "librdc_client_smi.so") set(library_files "${LIB_RDC_ROCR}" "${LIB_RDC_ROCR}.${MAJ_VERSION}" "${LIB_RDC_ROCR}.${SO_VERSION}" ) set(library_files "${LIB_RDC_ROCP}" "${LIB_RDC_ROCP}.${MAJ_VERSION}" "${LIB_RDC_ROCP}.${SO_VERSION}" ) set(library_files "${library_files}" "${LIB_RDC_CLIENT_SMI}" "${LIB_RDC_CLIENT_SMI}.${MAJ_VERSION}" "${LIB_RDC_CLIENT_SMI}.${SO_VERSION}" ) - set(library_files "${library_files}" "${LIB_RDC_RAS}") set(library_files "${library_files}" "${LIB_RDC_RVS}") foreach(file_name ${library_files}) diff --git a/common/rdc_field.data b/common/rdc_field.data index a74e582353..d3de98439e 100644 --- a/common/rdc_field.data +++ b/common/rdc_field.data @@ -43,41 +43,57 @@ FLD_DESC_ENT(RDC_FI_GPU_TEMP, "GPU temperature in millidegrees Celsiu FLD_DESC_ENT(RDC_FI_POWER_USAGE, "Power usage in microwatts", "POWER_USAGE", true) FLD_DESC_ENT(RDC_FI_PCIE_TX, "PCIe Tx utilization in bytes/second", "PCIE_TX", true) FLD_DESC_ENT(RDC_FI_PCIE_RX, "PCIe Rx utilization in bytes/second", "PCIE_RX", true) -FLD_DESC_ENT(RDC_FI_PCIE_BANDWIDTH, "PCIe bandwidth in GB/sec", "PCIE_BANDWIDTH", true) +FLD_DESC_ENT(RDC_FI_PCIE_BANDWIDTH, "PCIe bandwidth in GB/sec", "PCIE_BANDWIDTH", true) FLD_DESC_ENT(RDC_FI_GPU_UTIL, "GPU busy percentage", "GPU_UTIL", true) FLD_DESC_ENT(RDC_FI_GPU_MEMORY_USAGE, "Memory usage of the GPU instance in bytes", "GPU_MEMORY_USAGE", true) FLD_DESC_ENT(RDC_FI_GPU_MEMORY_TOTAL, "Total memory of the GPU instance", "GPU_MEMORY_TOTAL", true) + +// ECC totals FLD_DESC_ENT(RDC_FI_ECC_CORRECT_TOTAL, "Accumulated Single Error Correction", "ECC_CORRECT", true) FLD_DESC_ENT(RDC_FI_ECC_UNCORRECT_TOTAL, "Accumulated Double Error Detection", "ECC_UNCORRECT", true) -FLD_DESC_ENT(RDC_FI_ECC_SDMA_SEC, "SDMA Single Error Correction", "ECC_SDMA_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_SDMA_DED, "SDMA Double Error Detection", "ECC_SDMA_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_GFX_SEC, "GFX Single Error Correction", "ECC_GFX_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_GFX_DED, "GFX Double Error Detection", "ECC_GFX_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_MMHUB_SEC, "MMHUB Single Error Correction", "ECC_MMHUB_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_MMHUB_DED, "MMHUB Double Error Detection", "ECC_MMHUB_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_ATHUB_SEC, "ATHUB Single Error Correction", "ECC_ATHUB_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_ATHUB_DED, "ATHUB Double Error Detection", "ECC_ATHUB_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_BIF_SEC, "BIF Single Error Correction", "ECC_BIF_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_BIF_DED, "BIF Double Error Detection", "ECC_BIF_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_HDP_SEC, "HDP Single Error Correction", "ECC_HDP_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_HDP_DED, "HDP Double Error Detection", "ECC_HDP_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_XGMI_WAFL_SEC, "XGMI WAFL Single Error Correction", "ECC_XGMI_WAFL_SEC",true) -FLD_DESC_ENT(RDC_FI_ECC_XGMI_WAFL_DED, "XGMI WAFL Double Error Detection", "ECC_XGMI_WAFL_DED",true) -FLD_DESC_ENT(RDC_FI_ECC_DF_SEC, "DF Single Error Correction", "ECC_DF_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_DF_DED, "DF Double Error Detection", "ECC_DF_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_SMN_SEC, "SMN Single Error Correction", "ECC_SMN_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_SMN_DED, "SMN Double Error Detection", "ECC_SMN_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_SEM_SEC, "SEM Single Error Correction", "ECC_SEM_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_SEM_DED, "SEM Double Error Detection", "ECC_SEM_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_MP0_SEC, "MP0 Single Error Correction", "ECC_MP0_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_MP0_DED, "MP0 Double Error Detection", "ECC_MP0_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_MP1_SEC, "MP1 Single Error Correction", "ECC_MP1_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_MP1_DED, "MP1 Double Error Detection", "ECC_MP1_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_FUSE_SEC, "FUSE Single Error Correction", "ECC_FUSE_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_FUSE_DED, "FUSE Double Error Detection", "ECC_FUSE_DED", true) -FLD_DESC_ENT(RDC_FI_ECC_UMC_SEC, "UMC Single Error Correction", "ECC_UMC_SEC", true) -FLD_DESC_ENT(RDC_FI_ECC_UMC_DED, "UMC Double Error Detection", "ECC_UMC_DED", true) + +// ECC blocks +FLD_DESC_ENT(RDC_FI_ECC_SDMA_CE, "SDMA Correctable Error", "ECC_SDMA_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_SDMA_UE, "SDMA Uncorrectable Error", "ECC_SDMA_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_GFX_CE, "GFX Correctable Error", "ECC_GFX_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_GFX_UE, "GFX Uncorrectable Error", "ECC_GFX_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_MMHUB_CE, "MMHUB Correctable Error", "ECC_MMHUB_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_MMHUB_UE, "MMHUB Uncorrectable Error", "ECC_MMHUB_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_ATHUB_CE, "ATHUB Correctable Error", "ECC_ATHUB_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_ATHUB_UE, "ATHUB Uncorrectable Error", "ECC_ATHUB_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_PCIE_BIF_CE, "PCIE_BIF Correctable Error", "ECC_PCIE_BIF_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_PCIE_BIF_UE, "PCIE_BIF Uncorrectable Error", "ECC_PCIE_BIF_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_HDP_CE, "HDP Correctable Error", "ECC_HDP_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_HDP_UE, "HDP Uncorrectable Error", "ECC_HDP_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_XGMI_WAFL_CE, "XGMI_WAFL Correctable Error", "ECC_XGMI_WAFL_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_XGMI_WAFL_UE, "XGMI_WAFL Uncorrectable Error", "ECC_XGMI_WAFL_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_DF_CE, "DF Correctable Error", "ECC_DF_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_DF_UE, "DF Uncorrectable Error", "ECC_DF_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_SMN_CE, "SMN Correctable Error", "ECC_SMN_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_SMN_UE, "SMN Uncorrectable Error", "ECC_SMN_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_SEM_CE, "SEM Correctable Error", "ECC_SEM_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_SEM_UE, "SEM Uncorrectable Error", "ECC_SEM_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_MP0_CE, "MP0 Correctable Error", "ECC_MP0_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_MP0_UE, "MP0 Uncorrectable Error", "ECC_MP0_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_MP1_CE, "MP1 Correctable Error", "ECC_MP1_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_MP1_UE, "MP1 Uncorrectable Error", "ECC_MP1_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_FUSE_CE, "FUSE Correctable Error", "ECC_FUSE_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_FUSE_UE, "FUSE Uncorrectable Error", "ECC_FUSE_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_UMC_CE, "UMC Correctable Error", "ECC_UMC_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_UMC_UE, "UMC Uncorrectable Error", "ECC_UMC_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_MCA_CE, "MCA Correctable Error", "ECC_MCA_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_MCA_UE, "MCA Uncorrectable Error", "ECC_MCA_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_VCN_CE, "VCN Correctable Error", "ECC_VCN_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_VCN_UE, "VCN Uncorrectable Error", "ECC_VCN_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_JPEG_CE, "JPEG Correctable Error", "ECC_JPEG_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_JPEG_UE, "JPEG Uncorrectable Error", "ECC_JPEG_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_IH_CE, "IH Correctable Error", "ECC_IH_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_IH_UE, "IH Uncorrectable Error", "ECC_IH_UE", true) +FLD_DESC_ENT(RDC_FI_ECC_MPIO_CE, "MPIO Correctable Error", "ECC_MPIO_CE", true) +FLD_DESC_ENT(RDC_FI_ECC_MPIO_UE, "MPIO Uncorrectable Error", "ECC_MPIO_UE", true) + +// XGMI FLD_DESC_ENT(RDC_FI_XGMI_0_READ_KB, "XGMI0 accumulated data read size (KB)", "XGMI_0_READ", true) FLD_DESC_ENT(RDC_FI_XGMI_1_READ_KB, "XGMI1 accumulated data read size (KB)", "XGMI_1_READ", true) FLD_DESC_ENT(RDC_FI_XGMI_2_READ_KB, "XGMI2 accumulated data read size (KB)", "XGMI_2_READ", true) diff --git a/include/rdc/rdc.h b/include/rdc/rdc.h index d6ee5fc12b..9919ee4d35 100644 --- a/include/rdc/rdc.h +++ b/include/rdc/rdc.h @@ -185,47 +185,46 @@ typedef enum { RDC_FI_ECC_CORRECT_TOTAL = 600, //!< Accumulated correctable ECC errors RDC_FI_ECC_UNCORRECT_TOTAL, //!< Accumulated uncorrectable ECC errors - RDC_FI_ECC_SDMA_SEC, //!< SDMA Single Error Correction - RDC_FI_ECC_SDMA_DED, //!< SDMA Double Error Detection - - RDC_FI_ECC_GFX_SEC, //!< GFX Single Error Correction - RDC_FI_ECC_GFX_DED, //!< GFX Double Error Detection - - RDC_FI_ECC_MMHUB_SEC, //!< MMHUB Single Error Correction - RDC_FI_ECC_MMHUB_DED, //!< MMHUB Double Error Detection - - RDC_FI_ECC_ATHUB_SEC, //!< ATHUB Single Error Correction - RDC_FI_ECC_ATHUB_DED, //!< ATHUB Double Error Detection - - RDC_FI_ECC_BIF_SEC, //!< BIF Single Error Correction - RDC_FI_ECC_BIF_DED, //!< BIF Double Error Detection - - RDC_FI_ECC_HDP_SEC, //!< HDP Single Error Correction - RDC_FI_ECC_HDP_DED, //!< HDP Double Error Detection - - RDC_FI_ECC_XGMI_WAFL_SEC, //!< XGMI WAFL Single Error Correction - RDC_FI_ECC_XGMI_WAFL_DED, //!< XGMI WAFL Double Error Detection - - RDC_FI_ECC_DF_SEC, //!< DF Single Error Correction - RDC_FI_ECC_DF_DED, //!< DF Double Error Detection - - RDC_FI_ECC_SMN_SEC, //!< SMN Single Error Correction - RDC_FI_ECC_SMN_DED, //!< SMN Double Error Detection - - RDC_FI_ECC_SEM_SEC, //!< SEM Single Error Correction - RDC_FI_ECC_SEM_DED, //!< SEM Double Error Detection - - RDC_FI_ECC_MP0_SEC, //!< MP0 Single Error Correction - RDC_FI_ECC_MP0_DED, //!< MP0 Double Error Detection - - RDC_FI_ECC_MP1_SEC, //!< MP1 Single Error Correction - RDC_FI_ECC_MP1_DED, //!< MP1 Double Error Detection - - RDC_FI_ECC_FUSE_SEC, //!< FUSE Single Error Correction - RDC_FI_ECC_FUSE_DED, //!< FUSE Double Error Detection - - RDC_FI_ECC_UMC_SEC, //!< UMC Single Error Correction - RDC_FI_ECC_UMC_DED, //!< UMC Double Error Detection + RDC_FI_ECC_FIRST = 602, //!< FIRST Error Correction and Detection field + RDC_FI_ECC_SDMA_CE = RDC_FI_ECC_FIRST, + RDC_FI_ECC_SDMA_UE, + RDC_FI_ECC_GFX_CE, + RDC_FI_ECC_GFX_UE, + RDC_FI_ECC_MMHUB_CE, + RDC_FI_ECC_MMHUB_UE, + RDC_FI_ECC_ATHUB_CE, + RDC_FI_ECC_ATHUB_UE, + RDC_FI_ECC_PCIE_BIF_CE, + RDC_FI_ECC_PCIE_BIF_UE, + RDC_FI_ECC_HDP_CE, + RDC_FI_ECC_HDP_UE, + RDC_FI_ECC_XGMI_WAFL_CE, + RDC_FI_ECC_XGMI_WAFL_UE, + RDC_FI_ECC_DF_CE, + RDC_FI_ECC_DF_UE, + RDC_FI_ECC_SMN_CE, + RDC_FI_ECC_SMN_UE, + RDC_FI_ECC_SEM_CE, + RDC_FI_ECC_SEM_UE, + RDC_FI_ECC_MP0_CE, + RDC_FI_ECC_MP0_UE, + RDC_FI_ECC_MP1_CE, + RDC_FI_ECC_MP1_UE, + RDC_FI_ECC_FUSE_CE, + RDC_FI_ECC_FUSE_UE, + RDC_FI_ECC_UMC_CE, + RDC_FI_ECC_UMC_UE, + RDC_FI_ECC_MCA_CE, + RDC_FI_ECC_MCA_UE, + RDC_FI_ECC_VCN_CE, + RDC_FI_ECC_VCN_UE, + RDC_FI_ECC_JPEG_CE, + RDC_FI_ECC_JPEG_UE, + RDC_FI_ECC_IH_CE, + RDC_FI_ECC_IH_UE, + RDC_FI_ECC_MPIO_CE, + RDC_FI_ECC_MPIO_UE, + RDC_FI_ECC_LAST = RDC_FI_ECC_MPIO_UE, // In new ASCI, such as MI300, the XGMI events is not supported // Using below XGMI related fields to calculate the bandwidth. @@ -320,6 +319,13 @@ typedef enum { RDC_EVNT_NOTIF_LAST = RDC_EVNT_NOTIF_RING_HANG, } rdc_field_t; + +// even and odd numbers are used for correctable and uncorrectable errors +static_assert(RDC_FI_ECC_SDMA_CE % 2 == 0, "Correctable Error enum is not even"); +static_assert(RDC_FI_ECC_SDMA_UE % 2 == 1, "Uncorrectable Error enum is not odd"); +static_assert(RDC_FI_ECC_MPIO_CE % 2 == 0, "Correctable Error enum is not even"); +static_assert(RDC_FI_ECC_MPIO_UE % 2 == 1, "Uncorrectable Error enum is not odd"); + #define RDC_EVNT_IS_NOTIF_FIELD(FIELD) \ ((FIELD) >= RDC_EVNT_NOTIF_FIRST && (FIELD) <= RDC_EVNT_NOTIF_LAST) /** diff --git a/include/rdc_lib/RdcDiagnosticLibInterface.h b/include/rdc_lib/RdcDiagnosticLibInterface.h index 9088cce673..09ac8c8ac9 100644 --- a/include/rdc_lib/RdcDiagnosticLibInterface.h +++ b/include/rdc_lib/RdcDiagnosticLibInterface.h @@ -22,7 +22,7 @@ THE SOFTWARE. #ifndef INCLUDE_RDC_LIB_RDCDIAGNOSTICLIBINTERFACE_H_ #define INCLUDE_RDC_LIB_RDCDIAGNOSTICLIBINTERFACE_H_ -// The telemetry interface for libraries, for example, RAS. +// The telemetry interface for libraries, for example, AMD-SMI. #include extern "C" { diff --git a/include/rdc_lib/RdcTelemetryLibInterface.h b/include/rdc_lib/RdcTelemetryLibInterface.h index e50e8e63cd..843f7371c4 100644 --- a/include/rdc_lib/RdcTelemetryLibInterface.h +++ b/include/rdc_lib/RdcTelemetryLibInterface.h @@ -22,7 +22,7 @@ THE SOFTWARE. #ifndef INCLUDE_RDC_LIB_RDCTELEMETRYLIBINTERFACE_H_ #define INCLUDE_RDC_LIB_RDCTELEMETRYLIBINTERFACE_H_ -// The telemetry interface for libraries, for example, RAS. +// The telemetry interface for libraries, for example, AMD-SMI. #include #include diff --git a/include/rdc_lib/impl/RdcMetricFetcherImpl.h b/include/rdc_lib/impl/RdcMetricFetcherImpl.h index ac8e6ff73e..63745a66df 100644 --- a/include/rdc_lib/impl/RdcMetricFetcherImpl.h +++ b/include/rdc_lib/impl/RdcMetricFetcherImpl.h @@ -84,7 +84,8 @@ class RdcMetricFetcherImpl final : public RdcMetricFetcher { std::shared_ptr get_smi_data(RdcFieldKey key); uint64_t now(); - void get_ecc_error(uint32_t gpu_index, rdc_field_t field_id, rdc_field_value* value); + void get_ecc(uint32_t gpu_index, rdc_field_t field_id, rdc_field_value* value); + void get_ecc_total(uint32_t gpu_index, rdc_field_t field_id, rdc_field_value* value); //!< return true if starting async_get bool async_get_pcie_throughput(uint32_t gpu_index, rdc_field_t field_id, rdc_field_value* value); diff --git a/include/rdc_lib/impl/RdcRasLib.h b/include/rdc_lib/impl/RdcRasLib.h deleted file mode 100644 index 329e4ba0ec..0000000000 --- a/include/rdc_lib/impl/RdcRasLib.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright (c) 2020 - present Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ -#ifndef INCLUDE_RDC_LIB_IMPL_RDCRASLIB_H_ -#define INCLUDE_RDC_LIB_IMPL_RDCRASLIB_H_ - -#include -#include -#include -#include -#include -#include - -#include "rdc_lib/RdcDiagnostic.h" -#include "rdc_lib/RdcLibraryLoader.h" -#include "rdc_lib/RdcTelemetry.h" - -namespace amd { -namespace rdc { -class RdcRasLib : public RdcTelemetry, public RdcDiagnostic { - public: - // get support field ids - rdc_status_t rdc_telemetry_fields_query(uint32_t field_ids[MAX_NUM_FIELDS], - uint32_t* field_count) override; - - // Fetch - rdc_status_t rdc_telemetry_fields_value_get(rdc_gpu_field_t* fields, uint32_t fields_count, - rdc_field_value_f callback, void* user_data) override; - - rdc_status_t rdc_telemetry_fields_watch(rdc_gpu_field_t* fields, uint32_t fields_count) override; - - rdc_status_t rdc_telemetry_fields_unwatch(rdc_gpu_field_t* fields, - uint32_t fields_count) override; - - rdc_status_t rdc_diag_test_cases_query(rdc_diag_test_cases_t test_cases[MAX_TEST_CASES], - uint32_t* test_case_count) override; - - // Run a specific test case - rdc_status_t rdc_test_case_run(rdc_diag_test_cases_t test_case, - uint32_t gpu_index[RDC_MAX_NUM_DEVICES], uint32_t gpu_count, - const char* config, size_t config_size, - rdc_diag_test_result_t* result) override; - - rdc_status_t rdc_diagnostic_run(const rdc_group_info_t& gpus, rdc_diag_level_t level, - const char* config, size_t config_size, - rdc_diag_response_t* response) override; - - rdc_status_t rdc_diag_init(uint64_t flags) override; - rdc_status_t rdc_diag_destroy() override; - - RdcRasLib(); - - ~RdcRasLib(); - - private: - RdcLibraryLoader lib_loader_; - rdc_status_t (*fields_value_get_)(rdc_gpu_field_t*, uint32_t, rdc_field_value_f, void*); - rdc_status_t (*fields_query_)(uint32_t[MAX_NUM_FIELDS], uint32_t*); - - rdc_status_t (*fields_watch_)(rdc_gpu_field_t*, uint32_t); - rdc_status_t (*fields_unwatch_)(rdc_gpu_field_t*, uint32_t); - - rdc_status_t (*rdc_module_init_)(uint64_t); - rdc_status_t (*rdc_module_destroy_)(); -}; -typedef std::shared_ptr RdcRasLibPtr; - -} // namespace rdc -} // namespace amd - -#endif // INCLUDE_RDC_LIB_IMPL_RDCRASLIB_H_ diff --git a/include/rdc_lib/impl/RdcTelemetryModule.h b/include/rdc_lib/impl/RdcTelemetryModule.h index cae45af4c0..19e39ed28d 100644 --- a/include/rdc_lib/impl/RdcTelemetryModule.h +++ b/include/rdc_lib/impl/RdcTelemetryModule.h @@ -29,7 +29,6 @@ THE SOFTWARE. #include "rdc_lib/RdcMetricFetcher.h" #include "rdc_lib/RdcTelemetry.h" -#include "rdc_lib/impl/RdcRasLib.h" #include "rdc_lib/impl/RdcSmiLib.h" namespace amd { diff --git a/ras_prebuild/config/arcturus.json b/ras_prebuild/config/arcturus.json deleted file mode 100644 index cc4cc78d94..0000000000 --- a/ras_prebuild/config/arcturus.json +++ /dev/null @@ -1,5680 +0,0 @@ -{ - "version": "0.0.1", - "type": { - "parity": 1, - "single_correctable": 2, - "multi_uncorrectable": 4, - "poison": 8 - }, - "block": { - "umc": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "sdma": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx": { - "index": 2, - "support": 1, - "subblock": { - "gfx_cpc_scratch": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_ucode": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me1_dc_state": { - "index": 2, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me1_dc_csinvoc": { - "index": 3, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me1_dc_restore": { - "index": 4, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me1_dc_csinvoc1": { - "index": 5, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me2_dc_state": { - "index": 6, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me2_dc_csinvoc": { - "index": 7, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_me2_dc_restore": { - "index": 8, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpf_me2_roq": { - "index": 9, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpf_me1_roq": { - "index": 10, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpf_tciu_tag": { - "index": 11, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_mem": { - "index": 12, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_input_queue": { - "index": 13, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_oa_phy_cmd_ram_mem": { - "index": 14, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_oa_phy_data_ram_mem": { - "index": 15, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_oa_pipe_mem": { - "index": 16, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_sr_mem": { - "index": 17, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_gds_expreq_mem": { - "index": 18, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_wb_grant_30_mem": { - "index": 19, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_wb_grant_61_mem": { - "index": 20, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_life_cnt_mem": { - "index": 21, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_sgpr": { - "index": 22, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_lds_d": { - "index": 23, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_lds_i": { - "index": 24, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_vgpr": { - "index": 25, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_inst_utcl1_lfifo": { - "index": 26, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu0_write_data_buf": { - "index": 27, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu0_utcl1_lfifo": { - "index": 28, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu1_write_data_buf": { - "index": 29, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu1_utcl1_lfifo": { - "index": 30, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu2_write_data_buf": { - "index": 31, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu2_utcl1_lfifo": { - "index": 32, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_inst_tag_ram": { - "index": 33, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_inst_utcl1_miss_fifo": { - "index": 34, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_inst_miss_fifo": { - "index": 35, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_inst_bank_ram": { - "index": 36, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_data_tag_ram": { - "index": 37, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_data_hit_fifo": { - "index": 38, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_data_miss_fifo": { - "index": 39, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_data_dirty_bit_ram": { - "index": 40, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_banka_data_bank_ram": { - "index": 41, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_inst_tag_ram": { - "index": 42, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_inst_utcl1_miss_fifo": { - "index": 43, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_inst_miss_fifo": { - "index": 44, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_inst_bank_ram": { - "index": 45, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_data_tag_ram": { - "index": 46, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_data_hit_fifo": { - "index": 47, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_data_miss_fifo": { - "index": 48, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_data_dirty_bit_ram": { - "index": 49, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_bankb_data_bank_ram": { - "index": 50, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fs_dfifo": { - "index": 51, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fs_afifo": { - "index": 52, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fl_lfifo": { - "index": 53, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fx_lfifo": { - "index": 54, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fs_cfifo": { - "index": 55, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tca_hole_fifo": { - "index": 56, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tca_req_fifo": { - "index": 57, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data": { - "index": 58, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_0_1": { - "index": 59, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_1_0": { - "index": 60, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_1_1": { - "index": 61, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_dirty_bank_0": { - "index": 62, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_dirty_bank_1": { - "index": 63, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_high_rate_tag": { - "index": 64, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_low_rate_tag": { - "index": 65, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_in_use_dec": { - "index": 66, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_in_use_transfer": { - "index": 67, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_return_data": { - "index": 68, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_return_control": { - "index": 69, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_uc_atomic_fifo": { - "index": 70, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_write_return": { - "index": 71, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_write_cache_read": { - "index": 72, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_src_fifo": { - "index": 73, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_tag_probe_fifo": { - "index": 74, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_latency_fifo": { - "index": 75, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_latency_fifo_next_ram": { - "index": 76, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tci_write_ram": { - "index": 77, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_cache_ram": { - "index": 78, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_lfifo_ram": { - "index": 79, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_cmd_fifo": { - "index": 80, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_vm_fifo": { - "index": 81, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_db_ram": { - "index": 82, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_utcl1_lfifo0": { - "index": 83, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_utcl1_lfifo1": { - "index": 84, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_ss_fifo_lo": { - "index": 85, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_ss_fifo_hi": { - "index": 86, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_cs_fifo": { - "index": 87, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramrd_cmdmem": { - "index": 88, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_cmdmem": { - "index": 89, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_datamem": { - "index": 90, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_rret_tagmem": { - "index": 91, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_wret_tagmem": { - "index": 92, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmird_cmdmem": { - "index": 93, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmiwr_cmdmem": { - "index": 94, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmiwr_datamem": { - "index": 95, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramrd_pagemem": { - "index": 96, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_pagemem": { - "index": 97, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_iord_cmdmem": { - "index": 98, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_iowr_cmdmem": { - "index": 99, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_iowr_datamem": { - "index": 100, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmird_pagemem": { - "index": 101, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmiwr_pagemem": { - "index": 102, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_d0mem": { - "index": 103, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_d1mem": { - "index": 104, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_d2mem": { - "index": 105, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_d3mem": { - "index": 106, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_a0mem": { - "index": 107, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_a1mem": { - "index": 108, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_a2mem": { - "index": 109, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_a3mem": { - "index": 110, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_mam_afmem": { - "index": 111, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_vml2_bank_cache": { - "index": 112, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_vml2_walker": { - "index": 113, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utcl2_router": { - "index": 114, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_atcl2_cache_2m_bank": { - "index": 115, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_atcl2_cache_4k_bank": { - "index": 116, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlcg_instr_ram": { - "index": 117, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlcg_scratch_ram": { - "index": 118, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlcv_instr_ram": { - "index": 119, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlcv_scratch_ram": { - "index": 120, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_tctag_ram": { - "index": 121, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_scratch_ram": { - "index": 122, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_srm_data_ram": { - "index": 123, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_srm_addr_ram": { - "index": 124, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se0_scratch_ram": { - "index": 125, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se1_scratch_ram": { - "index": 126, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se2_scratch_ram": { - "index": 127, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se3_scratch_ram": { - "index": 128, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se4_scratch_ram": { - "index": 129, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se5_scratch_ram": { - "index": 130, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se6_scratch_ram": { - "index": 131, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "rlc_spm_se7_scratch_ram": { - "index": 132, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - } - }, - "mmhub": { - "index": 3, - "support": 1, - "subblock": { - "mmea0_dramrd_cmdmem": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_dramwr_cmdmem": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_dramwr_datamem": { - "index": 2, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_rret_tagmem": { - "index": 3, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_wret_tagmem": { - "index": 4, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_gmird_cmdmem": { - "index": 5, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_gmiwr_cmdmem": { - "index": 6, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_gmiwr_datamem": { - "index": 7, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_dramrd_pagemem": { - "index": 8, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_dramwr_pagemem": { - "index": 9, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_iord_cmdmem": { - "index": 10, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_iowr_cmdmem": { - "index": 11, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_iowr_datamem": { - "index": 12, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_gmird_pagemem": { - "index": 13, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_gmiwr_pagemem": { - "index": 14, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_mam_d0mem": { - "index": 15, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_mam_d1mem": { - "index": 16, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_mam_d2mem": { - "index": 17, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea0_mam_d3mem": { - "index": 18, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_dramrd_cmdmem": { - "index": 19, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_dramwr_cmdmem": { - "index": 20, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_dramwr_datamem": { - "index": 21, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_rret_tagmem": { - "index": 22, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_wret_tagmem": { - "index": 23, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_gmird_cmdmem": { - "index": 24, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_gmiwr_cmdmem": { - "index": 25, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_gmiwr_datamem": { - "index": 26, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_dramrd_pagemem": { - "index": 27, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_dramwr_pagemem": { - "index": 28, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_iord_cmdmem": { - "index": 29, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_iowr_cmdmem": { - "index": 30, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_iowr_datamem": { - "index": 31, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_gmird_pagemem": { - "index": 32, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_gmiwr_pagemem": { - "index": 33, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_mam_d0mem": { - "index": 34, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_mam_d1mem": { - "index": 35, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_mam_d2mem": { - "index": 36, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea1_mam_d3mem": { - "index": 37, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_dramrd_cmdmem": { - "index": 38, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_dramwr_cmdmem": { - "index": 39, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_dramwr_datamem": { - "index": 40, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_rret_tagmem": { - "index": 41, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_wret_tagmem": { - "index": 42, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_gmird_cmdmem": { - "index": 43, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_gmiwr_cmdmem": { - "index": 44, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_gmiwr_datamem": { - "index": 45, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_dramrd_pagemem": { - "index": 46, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_dramwr_pagemem": { - "index": 47, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_iord_cmdmem": { - "index": 48, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_iowr_cmdmem": { - "index": 49, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_iowr_datamem": { - "index": 50, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_gmird_pagemem": { - "index": 51, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_gmiwr_pagemem": { - "index": 52, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_mam_d0mem": { - "index": 53, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_mam_d1mem": { - "index": 54, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_mam_d2mem": { - "index": 55, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea2_mam_d3mem": { - "index": 56, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_dramrd_cmdmem": { - "index": 57, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_dramwr_cmdmem": { - "index": 58, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_dramwr_datamem": { - "index": 59, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_rret_tagmem": { - "index": 60, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_wret_tagmem": { - "index": 61, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_gmird_cmdmem": { - "index": 62, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_gmiwr_cmdmem": { - "index": 63, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_gmiwr_datamem": { - "index": 64, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_dramrd_pagemem": { - "index": 65, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_dramwr_pagemem": { - "index": 66, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_iord_cmdmem": { - "index": 67, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_iowr_cmdmem": { - "index": 68, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_iowr_datamem": { - "index": 69, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_gmird_pagemem": { - "index": 70, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_gmiwr_pagemem": { - "index": 71, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_mam_d0mem": { - "index": 72, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_mam_d1mem": { - "index": 73, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_mam_d2mem": { - "index": 74, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea3_mam_d3mem": { - "index": 75, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_dramrd_cmdmem": { - "index": 76, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_dramwr_cmdmem": { - "index": 77, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_dramwr_datamem": { - "index": 78, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_rret_tagmem": { - "index": 79, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_wret_tagmem": { - "index": 80, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_gmird_cmdmem": { - "index": 81, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_gmiwr_cmdmem": { - "index": 82, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_gmiwr_datamem": { - "index": 83, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_dramrd_pagemem": { - "index": 84, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_dramwr_pagemem": { - "index": 85, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_iord_cmdmem": { - "index": 86, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_iowr_cmdmem": { - "index": 87, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_iowr_datamem": { - "index": 88, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_gmird_pagemem": { - "index": 89, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_gmiwr_pagemem": { - "index": 90, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_mam_d0mem": { - "index": 91, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_mam_d1mem": { - "index": 92, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_mam_d2mem": { - "index": 93, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea4_mam_d3mem": { - "index": 94, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_dramrd_cmdmem": { - "index": 95, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_dramwr_cmdmem": { - "index": 96, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_dramwr_datamem": { - "index": 97, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_rret_tagmem": { - "index": 98, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_wret_tagmem": { - "index": 99, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_gmird_cmdmem": { - "index": 100, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_gmiwr_cmdmem": { - "index": 101, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_gmiwr_datamem": { - "index": 102, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_dramrd_pagemem": { - "index": 103, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_dramwr_pagemem": { - "index": 104, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_iord_cmdmem": { - "index": 105, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_iowr_cmdmem": { - "index": 106, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_iowr_datamem": { - "index": 107, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_gmird_pagemem": { - "index": 108, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_gmiwr_pagemem": { - "index": 109, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_mam_d0mem": { - "index": 110, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_mam_d1mem": { - "index": 111, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_mam_d2mem": { - "index": 112, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea5_mam_d3mem": { - "index": 113, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_dramrd_cmdmem": { - "index": 114, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_dramwr_cmdmem": { - "index": 115, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_dramwr_datamem": { - "index": 116, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_rret_tagmem": { - "index": 117, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_wret_tagmem": { - "index": 118, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_gmird_cmdmem": { - "index": 119, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_gmiwr_cmdmem": { - "index": 120, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_gmiwr_datamem": { - "index": 121, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_dramrd_pagemem": { - "index": 122, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_dramwr_pagemem": { - "index": 123, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_iord_cmdmem": { - "index": 124, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_iowr_cmdmem": { - "index": 125, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_iowr_datamem": { - "index": 126, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_gmird_pagemem": { - "index": 127, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_gmiwr_pagemem": { - "index": 128, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_mam_d0mem": { - "index": 129, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_mam_d1mem": { - "index": 130, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_mam_d2mem": { - "index": 131, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea6_mam_d3mem": { - "index": 132, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_dramrd_cmdmem": { - "index": 133, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_dramwr_cmdmem": { - "index": 134, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_dramwr_datamem": { - "index": 135, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_rret_tagmem": { - "index": 136, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_wret_tagmem": { - "index": 137, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_gmird_cmdmem": { - "index": 138, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_gmiwr_cmdmem": { - "index": 139, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_gmiwr_datamem": { - "index": 140, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_dramrd_pagemem": { - "index": 141, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_dramwr_pagemem": { - "index": 142, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_iord_cmdmem": { - "index": 143, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_iowr_cmdmem": { - "index": 144, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_iowr_datamem": { - "index": 145, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_gmird_pagemem": { - "index": 146, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_gmiwr_pagemem": { - "index": 147, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_mam_d0mem": { - "index": 148, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_mam_d1mem": { - "index": 149, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_mam_d2mem": { - "index": 150, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mmea7_mam_d3mem": { - "index": 151, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - } - }, - "athub": { - "index": 4, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "pcie_bif": { - "index": 5, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "hdp": { - "index": 6, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "xgmi_wafl": { - "index": 7, - "support": 1, - "method" : { - "crc": 2, - "data_parity": 6, - "replay_overflow": 7 - }, - "subblock": { - "xgmi": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable" - ] - }, - "wafl": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable" - ] - } - } - }, - "df": { - "index": 8, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "smn": { - "index": 9, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "sem": { - "index": 10, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mp0": { - "index": 11, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mp1": { - "index": 12, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "fuse": { - "index": 13, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - }, - "tests": [ - { - "name": "ras_umc.0.2", - "block": "umc", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_umc.0.4", - "block": "umc", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "ras_gfx.0.2", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.0.4", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.0.8", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.1.2", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/bin/gc_edc_tc_02.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.1.4", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.1.8", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.2.2", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_state", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.2.4", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_state", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.2.8", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_state", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.3.2", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.3.4", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.3.8", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.4.2", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_restore", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "status": "KFD context save/restore failed" - }, - { - "name": "ras_gfx.4.4", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_restore", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "status": "KFD context save/restore failed" - }, - { - "name": "ras_gfx.4.8", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_restore", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "status": "KFD context save/restore failed" - }, - { - "name": "ras_gfx.5.2", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.5.4", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.5.8", - "block": "gfx", - "subblock": "gfx_cpc_me1_dc_csinvoc1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.6.1", - "block": "gfx", - "subblock": "gfx_cpc_me2_dc_state", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No EDC counter, no support" - }, - { - "name": "ras_gfx.7.1", - "block": "gfx", - "subblock": "gfx_cpc_me2_dc_csinvoc", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No EDC counter, no support" - }, - { - "name": "ras_gfx.8.1", - "block": "gfx", - "subblock": "gfx_cpc_me2_dc_restore", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No EDC counter, no support" - }, - { - "name": "ras_gfx.9.2", - "block": "gfx", - "subblock": "gfx_cpf_me2_roq", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.9.4", - "block": "gfx", - "subblock": "gfx_cpf_me2_roq", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.9.8", - "block": "gfx", - "subblock": "gfx_cpf_me2_roq", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.10.2", - "block": "gfx", - "subblock": "gfx_cpf_me1_roq", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.10.4", - "block": "gfx", - "subblock": "gfx_cpf_me1_roq", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.10.8", - "block": "gfx", - "subblock": "gfx_cpf_me1_roq", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.11.2", - "block": "gfx", - "subblock": "gfx_cpf_tciu_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.11.4", - "block": "gfx", - "subblock": "gfx_cpf_tciu_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.11.8", - "block": "gfx", - "subblock": "gfx_cpf_tciu_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.12.2", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "Fail: No Graphic Ring" - }, - { - "name": "ras_gfx.12.4", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "Fail: No Graphic Ring" - }, - { - "name": "ras_gfx.12.8", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "Fail: No Graphic Ring" - }, - { - "name": "ras_gfx.13.1", - "block": "gfx", - "subblock": "gfx_gds_input_queue", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "backend": "drm", - "skip": "1", - "status": "No EDC counter, no support" - }, - { - "name": "ras_gfx.14.2", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "single_correctable", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.14.4", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.14.8", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.15.2", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_data_ram_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.15.4", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_data_ram_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.15.8", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_data_ram_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.16.2", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Fail" - }, - { - "name": "ras_gfx.16.4", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Fail" - }, - { - "name": "ras_gfx.16.8", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Fail" - }, - { - "name": "ras_gfx.17.2", - "block": "gfx", - "subblock": "gfx_spi_sr_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin", - "backend": "kfd", - "queue": "compute", - "gridX": "256", - "workGroupSizeX": "1", - "workGroupSizeY": "1", - "workGroupSizeZ": "1", - "maxQueueNum": "1", - "status": "Fail: The cp might be in an unrecoverable state due to an unsuccessful queues preemption" - }, - { - "name": "ras_gfx.17.2", - "block": "gfx", - "subblock": "gfx_spi_sr_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin", - "backend": "kfd", - "queue": "compute", - "gridX": "256", - "workGroupSizeX": "1", - "workGroupSizeY": "1", - "workGroupSizeZ": "1", - "maxQueueNum": "1", - "status": "Fail: The cp might be in an unrecoverable state due to an unsuccessful queues preemption" - }, - { - "name": "ras_gfx.17.2", - "block": "gfx", - "subblock": "gfx_spi_sr_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin", - "backend": "kfd", - "queue": "compute", - "gridX": "256", - "workGroupSizeX": "1", - "workGroupSizeY": "1", - "workGroupSizeZ": "1", - "maxQueueNum": "1", - "status": "Fail: The cp might be in an unrecoverable state due to an unsuccessful queues preemption" - }, - { - "name": "ras_gfx.18.2", - "block": "gfx", - "subblock": "gfx_spi_gds_expreq_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.18.4", - "block": "gfx", - "subblock": "gfx_spi_gds_expreq_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.18.8", - "block": "gfx", - "subblock": "gfx_spi_gds_expreq_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.19.2", - "block": "gfx", - "subblock": "gfx_spi_wb_grant_30_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.19.4", - "block": "gfx", - "subblock": "gfx_spi_wb_grant_30_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.19.8", - "block": "gfx", - "subblock": "gfx_spi_wb_grant_30_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.20.2", - "block": "gfx", - "subblock": "gfx_spi_wb_grant_61_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin", - "backend": "kfd", - "queue": "compute", - "se0_cu_mask": "1", - "se1_cu_mask": "0", - "se2_cu_mask": "0", - "se3_cu_mask": "0", - "se4_cu_mask": "0", - "se5_cu_mask": "0", - "se6_cu_mask": "0", - "se7_cu_mask": "0", - "simd_mask": "1", - "gridX": "8192", - "workGroupSizeX": "64", - "workGroupSizeY": "4", - "workGroupSizeZ": "1", - "maxQueueNum": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.21.2", - "block": "gfx", - "subblock": "gfx_spi_life_cnt_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin", - "gridX": "256", - "gridY": "1", - "gridZ": "1", - "workGroupSizeX": "1", - "workGroupSizeY": "1", - "workGroupSizeZ": "1", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.22.2", - "block": "gfx", - "subblock": "gfx_sq_sgpr", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.23.2", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.23.4", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.23.8", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.24.2", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.24.4", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.24.8", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.25.2", - "block": "gfx", - "subblock": "gfx_sq_vgpr", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.26.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.26.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.26.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.27.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.27.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.27.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.28.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.28.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.28.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.29.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.29.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.29.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.30.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.30.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.30.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.31.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.31.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.31.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.32.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.32.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.32.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.33.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.34.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_utcl1_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.34.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_utcl1_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.34.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_utcl1_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.35.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.35.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.35.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.36.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.36.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.36.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_inst_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.37.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.38.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_hit_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.38.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_hit_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.38.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_hit_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.39.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.39.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.39.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.40.1", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_dirty_bit_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "N/A" - }, - { - "name": "ras_gfx.41.2", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.41.4", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.41.8", - "block": "gfx", - "subblock": "gfx_sqc_banka_data_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.42.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.43.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_utcl1_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.43.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_utcl1_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.43.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_utcl1_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.44.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.44.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.44.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.45.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.45.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.45.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_inst_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.46.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.47.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_hit_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.47.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_hit_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.47.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_hit_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.48.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_miss_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.48.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_miss_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.48.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.49.1", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_dirty_bit_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "N/A" - }, - { - "name": "ras_gfx.50.2", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.50.4", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.50.8", - "block": "gfx", - "subblock": "gfx_sqc_bankb_data_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.51.2", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.51.4", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.51.8", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.52.2", - "block": "gfx", - "subblock": "gfx_ta_fs_afifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.52.4", - "block": "gfx", - "subblock": "gfx_ta_fs_afifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.52.8", - "block": "gfx", - "subblock": "gfx_ta_fs_afifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.53.2", - "block": "gfx", - "subblock": "gfx_ta_fl_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.53.4", - "block": "gfx", - "subblock": "gfx_ta_fl_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.53.8", - "block": "gfx", - "subblock": "gfx_ta_fl_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.54.2", - "block": "gfx", - "subblock": "gfx_ta_fx_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.54.4", - "block": "gfx", - "subblock": "gfx_ta_fx_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.54.8", - "block": "gfx", - "subblock": "gfx_ta_fx_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.55.2", - "block": "gfx", - "subblock": "gfx_ta_fs_cfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.55.4", - "block": "gfx", - "subblock": "gfx_ta_fs_cfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.55.8", - "block": "gfx", - "subblock": "gfx_ta_fs_cfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.56.2", - "block": "gfx", - "subblock": "gfx_tca_hole_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.56.4", - "block": "gfx", - "subblock": "gfx_tca_hole_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.56.8", - "block": "gfx", - "subblock": "gfx_tca_hole_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.57.1", - "block": "gfx", - "subblock": "gfx_tca_req_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "20", - "workGroupSizeX": "256", - "gridX": "16", - "COMPUTE_STATIC_THREAD_MGMT_SE0_sh0_cu_en": "255", - "status": "Fail" - }, - { - "name": "ras_gfx.58.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.58.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.58.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.59.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.59.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.59.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.60.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.60.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.60.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.61.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.61.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.61.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.62.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_0", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.63.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.64.2", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.64.4", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.64.8", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.65.2", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.65.4", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.65.8", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.66.2", - "block": "gfx", - "subblock": "gfx_tcc_in_use_dec", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.66.4", - "block": "gfx", - "subblock": "gfx_tcc_in_use_dec", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.66.8", - "block": "gfx", - "subblock": "gfx_tcc_in_use_dec", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.67.2", - "block": "gfx", - "subblock": "gfx_tcc_in_use_transfer", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.67.4", - "block": "gfx", - "subblock": "gfx_tcc_in_use_transfer", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.67.8", - "block": "gfx", - "subblock": "gfx_tcc_in_use_transfer", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.68.2", - "block": "gfx", - "subblock": "gfx_tcc_return_data", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.68.4", - "block": "gfx", - "subblock": "gfx_tcc_return_data", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.68.8", - "block": "gfx", - "subblock": "gfx_tcc_return_data", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.69.1", - "block": "gfx", - "subblock": "gfx_tcc_return_control", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Fail" - }, - { - "name": "ras_gfx.70.1", - "block": "gfx", - "subblock": "gfx_tcc_uc_atomic_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.71.1", - "block": "gfx", - "subblock": "gfx_tcc_write_return", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.72.1", - "block": "gfx", - "subblock": "gfx_tcc_write_cache_read", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.73.2", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.74.1", - "block": "gfx", - "subblock": "gfx_tcc_cache_tag_probe_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.75.2", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "loop": "128", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.75.4", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "loop": "128", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.75.8", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "loop": "128", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.76.1", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo_next_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "loop": "16", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.77.1", - "block": "gfx", - "subblock": "gfx_tci_write_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.78.2", - "block": "gfx", - "subblock": "gfx_tcp_cache_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.79.2", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.79.4", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.79.8", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.80.2", - "block": "gfx", - "subblock": "gfx_tcp_cmd_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.80.4", - "block": "gfx", - "subblock": "gfx_tcp_cmd_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.80.8", - "block": "gfx", - "subblock": "gfx_tcp_cmd_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.81.2", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.81.4", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.81.8", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.82.1", - "block": "gfx", - "subblock": "gfx_tcp_db_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change, with glmark2" - }, - { - "name": "ras_gfx.83.2", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.83.4", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.83.8", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.84.2", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.84.4", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.84.8", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.85.2", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.85.4", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.85.8", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.86.2", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.86.4", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.86.8", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.87.2", - "block": "gfx", - "subblock": "gfx_td_cs_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.87.4", - "block": "gfx", - "subblock": "gfx_td_cs_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.87.8", - "block": "gfx", - "subblock": "gfx_td_cs_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.88.2", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.88.4", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.88.8", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.89.2", - "block": "gfx", - "subblock": "gfx_ea_dramwr_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.90.2", - "block": "gfx", - "subblock": "gfx_ea_dramwr_datamem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.91.2", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.91.4", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.91.8", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.92.2", - "block": "gfx", - "subblock": "gfx_ea_wret_tagmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "status": "Fail" - }, - { - "name": "ras_gfx.93.2", - "block": "gfx", - "subblock": "gfx_ea_gmird_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.94.2", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02_ea.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.95.2", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_datamem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.96.1", - "block": "gfx", - "subblock": "gfx_ea_dramrd_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "5", - "addrType": "mtype_uc_vid", - "status": "Fail" - }, - { - "name": "ras_gfx.97.1", - "block": "gfx", - "subblock": "gfx_ea_dramwr_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.98.1", - "block": "gfx", - "subblock": "gfx_ea_iord_cmdmem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.99.1", - "block": "gfx", - "subblock": "gfx_ea_iowr_cmdmem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.100.1", - "block": "gfx", - "subblock": "gfx_ea_iowr_datamem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Fail" - }, - { - "name": "ras_gfx.101.1", - "block": "gfx", - "subblock": "gfx_ea_gmird_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "2", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.102.1", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "8", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.103.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d0mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.104.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d1mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.105.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d2mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.106.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d3mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.107.2", - "block": "gfx", - "subblock": "gfx_ea_mam_a0mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "status": "Fail" - }, - { - "name": "ras_gfx.108.2", - "block": "gfx", - "subblock": "gfx_ea_mam_a1mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "status": "Fail" - }, - { - "name": "ras_gfx.109.2", - "block": "gfx", - "subblock": "gfx_ea_mam_a2mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "status": "Fail" - }, - { - "name": "ras_gfx.110.2", - "block": "gfx", - "subblock": "gfx_ea_mam_a3mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "status": "Fail" - }, - { - "name": "ras_gfx.111.2", - "block": "gfx", - "subblock": "gfx_ea_mam_afmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "status": "Fail" - }, - { - "name": "ras_gfx.112.2", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "single_correctable", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.112.4", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "multi_uncorrectable", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.112.8", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "poison", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.113.2", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "loop": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.113.4", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "loop": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.113.8", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "loop": "4", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.114.2", - "block": "gfx", - "subblock": "utcl2_router", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "loop": "4", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.115.2", - "block": "gfx", - "subblock": "utc_atcl2_cache_2m_bank", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.116.2", - "block": "gfx", - "subblock": "utc_atcl2_cache_4k_bank", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.117.2", - "block": "gfx", - "subblock": "rlcg_instr_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.117.4", - "block": "gfx", - "subblock": "rlcg_instr_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.117.8", - "block": "gfx", - "subblock": "rlcg_instr_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: GPU hang with uncorrectable error & ERREVENT_ATHUB_INTERRUPT" - }, - { - "name": "ras_gfx.118.2", - "block": "gfx", - "subblock": "rlcg_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Success: with correctable error" - }, - { - "name": "ras_gfx.119.2", - "block": "gfx", - "subblock": "rlcv_instr_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.120.2", - "block": "gfx", - "subblock": "rlcv_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.121.2", - "block": "gfx", - "subblock": "rlc_tctag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.122.2", - "block": "gfx", - "subblock": "rlc_spm_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.123.2", - "block": "gfx", - "subblock": "rlc_srm_data_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.124.2", - "block": "gfx", - "subblock": "rlc_srm_addr_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.125.2", - "block": "gfx", - "subblock": "rlc_spm_se0_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.126.2", - "block": "gfx", - "subblock": "rlc_spm_se1_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.127.2", - "block": "gfx", - "subblock": "rlc_spm_se2_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.128.2", - "block": "gfx", - "subblock": "rlc_spm_se3_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.129.2", - "block": "gfx", - "subblock": "rlc_spm_se4_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.130.2", - "block": "gfx", - "subblock": "rlc_spm_se5_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.131.2", - "block": "gfx", - "subblock": "rlc_spm_se6_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_gfx.132.2", - "block": "gfx", - "subblock": "rlc_spm_se7_scratch_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Fail" - }, - { - "name": "ras_mmhub.0.4", - "block": "mmhub", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "ras_pcie_bif.0.2", - "block": "pcie_bif", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_pcie_bif.0.4", - "block": "pcie_bif", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "xgmi_wafl.0.2", - "block": "xgmi_wafl", - "subblock": "xgmi", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "xgmi_wafl.0.4", - "block": "xgmi_wafl", - "subblock": "xgmi", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "xgmi_wafl.1.2", - "block": "xgmi_wafl", - "subblock": "wafl", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "xgmi_wafl.1.4", - "block": "xgmi_wafl", - "subblock": "wafl", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - } - ] -} \ No newline at end of file diff --git a/ras_prebuild/config/config.json b/ras_prebuild/config/config.json deleted file mode 100644 index 5c3588bdda..0000000000 --- a/ras_prebuild/config/config.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0.0.1", - "devices": [ - { - "name": "VEGA20", - "ids": [ "0x66A0", "0x66A1", "0x66A2", "0x66A3", "0x66A4", "0x66A7", "0x66AF" ], - "config": "vega20.json", - "gfx": "libgfx9.so", - "sdma": "libsdma4.so" - }, - { - "name": "ARCTURUS", - "ids": [ "0x738C", "0x7388", "0x738E" ], - "config": "arcturus.json", - "gfx": "libgfx9.so", - "sdma": "libsdma4.so" - }, - { - "name": "SIENNA_CICHLID", - "ids": [ "0x73A0", "0x73A2", "0x73A3", "0x73AB", "0x73AE", "0x73BF" ], - "config": "sienna_cichlid.json", - "gfx": "libgfx10.so", - "sdma": "libsdma5.so" - } - ] -} \ No newline at end of file diff --git a/ras_prebuild/config/sienna_cichlid.json b/ras_prebuild/config/sienna_cichlid.json deleted file mode 100644 index c250304c8e..0000000000 --- a/ras_prebuild/config/sienna_cichlid.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": "0.0.1", - "type": { - "parity": 1, - "single_correctable": 2, - "multi_uncorrectable": 4, - "poison": 8 - }, - "block": { - "umc": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - }, - "tests": [ - { - "name": "ras_umc.0.2", - "block": "umc", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx10/edc/bin/sienna_cichlid/gc_edc_sqc_inst_bank_snop.bin" - }, - { - "name": "ras_umc.0.4", - "block": "umc", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx10/edc/bin/sienna_cichlid/gc_edc_sqc_inst_bank_snop.bin" - } - ] -} \ No newline at end of file diff --git a/ras_prebuild/config/vega20.json b/ras_prebuild/config/vega20.json deleted file mode 100644 index 3576418dce..0000000000 --- a/ras_prebuild/config/vega20.json +++ /dev/null @@ -1,4393 +0,0 @@ -{ - "version": "0.0.1", - "type": { - "parity": 1, - "single_correctable": 2, - "multi_uncorrectable": 4, - "poison": 8 - }, - "block": { - "umc": { - "index": 0, - "support": 1, - "type": [ - "parity", - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "sdma": { - "index": 1, - "support": 1, - "type": [ - "parity", - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx": { - "index": 2, - "support": 1, - "subblock": { - "gfx_cpc_scratch": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpc_ucode": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_dc_state_me1": { - "index": 2, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_dc_csinvoc_me1": { - "index": 3, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_dc_restore_me1": { - "index": 4, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_dc_state_me2": { - "index": 5, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_dc_csinvoc_me2": { - "index": 6, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_dc_restore_me2": { - "index": 7, - "support": 0, - "type": [ - "parity", - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpf_roq_me2": { - "index": 8, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_cpf_roq_me1": { - "index": 9, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_cpf_tag": { - "index": 10, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpg_dma_roq": { - "index": 11, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_cpg_dma_tag": { - "index": 12, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_cpg_tag": { - "index": 13, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_mem": { - "index": 14, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_input_queue": { - "index": 15, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_gds_oa_phy_cmd_ram_mem": { - "index": 16, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_gds_oa_phy_data_ram_mem": { - "index": 17, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_gds_oa_pipe_mem": { - "index": 18, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_spi_sr_mem": { - "index": 19, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sq_sgpr": { - "index": 20, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_lds_d": { - "index": 21, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_lds_i": { - "index": 22, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sq_vgpr": { - "index": 23, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_inst_utcl1_lfifo": { - "index": 24, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu0_write_data_buf": { - "index": 25, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu0_utcl1_lfifo": { - "index": 26, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu1_write_data_buf": { - "index": 27, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu1_utcl1_lfifo": { - "index": 28, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu2_write_data_buf": { - "index": 29, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_cu2_utcl1_lfifo": { - "index": 30, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_inst_banka_tag_ram": { - "index": 31, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_inst_banka_utcl1_miss_fifo": { - "index": 32, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_inst_banka_miss_fifo": { - "index": 33, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_inst_banka_bank_ram": { - "index": 34, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_banka_tag_ram": { - "index": 35, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_banka_hit_fifo": { - "index": 36, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_banka_miss_fifo": { - "index": 37, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_banka_dirty_bit_ram": { - "index": 38, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_banka_bank_ram": { - "index": 39, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_inst_bankb_tag_ram": { - "index": 40, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_inst_bankb_utcl1_miss_fifo": { - "index": 41, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_inst_bankb_miss_fifo": { - "index": 42, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_inst_bankb_bank_ram": { - "index": 43, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_bankb_tag_ram": { - "index": 44, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_sqc_data_bankb_hit_fifo": { - "index": 45, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_bankb_miss_fifo": { - "index": 46, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_bankb_dirty_bit_ram": { - "index": 47, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_sqc_data_bankb_bank_ram": { - "index": 48, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fs_dfifo": { - "index": 49, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ta_fs_afifo": { - "index": 50, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ta_fl_lfifo": { - "index": 51, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ta_fx_lfifo": { - "index": 52, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ta_fs_cfifo": { - "index": 53, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tca_hole_fifo": { - "index": 54, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tca_req_fifo": { - "index": 55, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_cache_data": { - "index": 56, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_0_1": { - "index": 57, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_1_0": { - "index": 58, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_data_bank_1_1": { - "index": 59, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_dirty_bank_0": { - "index": 60, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_cache_dirty_bank_1": { - "index": 61, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_high_rate_tag": { - "index": 62, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_low_rate_tag": { - "index": 63, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_in_use_dec": { - "index": 64, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_in_use_transfer": { - "index": 65, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_return_data": { - "support": 1, - "index": 66, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_return_control": { - "index": 67, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_uc_atomic_fifo": { - "index": 68, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_write_return": { - "index": 69, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_write_cache_read": { - "index": 70, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_src_fifo": { - "index": 71, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcc_src_fifo_next_ram": { - "index": 72, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_cache_tag_probe_fifo": { - "index": 73, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_latency_fifo": { - "index": 74, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_latency_fifo_next_ram": { - "index": 75, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_wrret_tag_write_return": { - "index": 76, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcc_atomic_return_buffer": { - "index": 77, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tci_write_ram": { - "index": 78, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcp_cache_ram": { - "index": 79, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_lfifo_ram": { - "index": 80, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_cmd_fifo": { - "index": 81, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcp_vm_fifo": { - "index": 82, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_db_ram": { - "index": 83, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_tcp_utcl1_lfifo0": { - "index": 84, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_tcp_utcl1_lfifo1": { - "index": 85, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_ss_fifo_lo": { - "index": 86, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_ss_fifo_hi": { - "index": 87, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_td_cs_fifo": { - "index": 88, - "support": 1, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_dramrd_cmdmem": { - "index": 89, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_cmdmem": { - "index": 90, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_datamem": { - "index": 91, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_rret_tagmem": { - "index": 92, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_wret_tagmem": { - "index": 93, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmird_cmdmem": { - "index": 94, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmiwr_cmdmem": { - "index": 95, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_gmiwr_datamem": { - "index": 96, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramrd_pagemem": { - "index": 97, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "gfx_ea_dramwr_pagemem": { - "index": 98, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_iord_cmdmem": { - "index": 99, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_iowr_cmdmem": { - "index": 100, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_iowr_datamem": { - "index": 101, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_gmird_pagemem": { - "index": 102, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_gmiwr_pagemem": { - "index": 103, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_mam_d0mem": { - "index": 104, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_mam_d1mem": { - "index": 105, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_mam_d2mem": { - "index": 106, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "gfx_ea_mam_d3mem": { - "index": 107, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "utc_vml2_bank_cache": { - "index": 108, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_vml2_walker": { - "index": 109, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "utc_atcl2_cache_2m_bank": { - "index": 110, - "support": 0, - "type": [ - "parity", - "poison" - ] - }, - "utc_atcl2_cache_4k_bank": { - "index": 111, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - } - }, - "mmhub": { - "index": 3, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "athub": { - "index": 4, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "pcie_bif": { - "index": 5, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "hdp": { - "index": 6, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "xgmi_wafl": { - "index": 7, - "support": 1, - "method" : { - "crc": 2, - "data_parity": 6, - "replay_overflow": 7 - }, - "subblock": { - "xgmi": { - "index": 0, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable" - ] - }, - "wafl": { - "index": 1, - "support": 1, - "type": [ - "single_correctable", - "multi_uncorrectable" - ] - } - } - }, - "df": { - "index": 8, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "smn": { - "index": 9, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "sem": { - "index": 10, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mp0": { - "index": 11, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "mp1": { - "index": 12, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - }, - "fuse": { - "index": 13, - "support": 0, - "type": [ - "single_correctable", - "multi_uncorrectable", - "poison" - ] - } - }, - "tests": [ - { - "name": "ras_umc.0.2", - "block": "umc", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_umc.0.4", - "block": "umc", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "ras_gfx.0.2", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_gfx.0.4", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.0.8", - "block": "gfx", - "subblock": "gfx_cpc_scratch", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "No GPU hang and no error count change" - }, - { - "name": "ras_gfx.1.2", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "status": "Error count change" - }, - { - "name": "ras_gfx.1.4", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.1.8", - "block": "gfx", - "subblock": "gfx_cpc_ucode", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.2.1", - "block": "gfx", - "subblock": "gfx_dc_state_me1", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.2.8", - "block": "gfx", - "subblock": "gfx_dc_state_me1", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.3.1", - "block": "gfx", - "subblock": "gfx_dc_csinvoc_me1", - "type": "parity", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.3.8", - "block": "gfx", - "subblock": "gfx_dc_csinvoc_me1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "gridX": "4", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.4.1", - "block": "gfx", - "subblock": "gfx_dc_restore_me1", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.4.8", - "block": "gfx", - "subblock": "gfx_dc_restore_me1", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.5.1", - "block": "gfx", - "subblock": "gfx_dc_state_me2", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.5.8", - "block": "gfx", - "subblock": "gfx_dc_state_me2", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.6.1", - "block": "gfx", - "subblock": "gfx_dc_csinvoc_me2", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.6.8", - "block": "gfx", - "subblock": "gfx_dc_csinvoc_me2", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.7.1", - "block": "gfx", - "subblock": "gfx_dc_restore_me2", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.7.8", - "block": "gfx", - "subblock": "gfx_dc_restore_me2", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "skip": "1", - "status": "No Support" - }, - { - "name": "ras_gfx.8.1", - "block": "gfx", - "subblock": "gfx_cpf_roq_me2", - "type": "parity", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.8.8", - "block": "gfx", - "subblock": "gfx_cpf_roq_me2", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.9.1", - "block": "gfx", - "subblock": "gfx_cpf_roq_me1", - "type": "parity", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.9.8", - "block": "gfx", - "subblock": "gfx_cpf_roq_me1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.10.2", - "block": "gfx", - "subblock": "gfx_cpf_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_gfx.10.4", - "block": "gfx", - "subblock": "gfx_cpf_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.11.1", - "block": "gfx", - "subblock": "gfx_cpg_dma_roq", - "type": "parity", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.11.8", - "block": "gfx", - "subblock": "gfx_cpg_dma_roq", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.12.2", - "block": "gfx", - "subblock": "gfx_cpg_dma_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_gfx.12.4", - "block": "gfx", - "subblock": "gfx_cpg_dma_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.12.8", - "block": "gfx", - "subblock": "gfx_cpg_dma_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.13.2", - "block": "gfx", - "subblock": "gfx_cpg_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/bin/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/bin/gc_edc_tc_02.bin", - "status": "Error count change" - }, - { - "name": "ras_gfx.13.4", - "block": "gfx", - "subblock": "gfx_cpg_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.13.8", - "block": "gfx", - "subblock": "gfx_cpg_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "internal": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.14.2", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "Fail" - }, - { - "name": "ras_gfx.14.4", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "Fail" - }, - { - "name": "ras_gfx.14.8", - "block": "gfx", - "subblock": "gfx_gds_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin", - "addrType": "mtype_gds", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.15.1", - "block": "gfx", - "subblock": "gfx_gds_input_queue", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin", - "backend": "drm", - "status": "GPU hang without error count change" - }, - { - "name": "ras_gfx.15.8", - "block": "gfx", - "subblock": "gfx_gds_input_queue", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_02.bin", - "backend": "drm", - "status": "GPU hang without error count change" - }, - { - "name": "ras_gfx.16.2", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Error count change" - }, - { - "name": "ras_gfx.16.4", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.16.8", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_cmd_ram_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.17.1", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_data_ram_mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.17.8", - "block": "gfx", - "subblock": "gfx_gds_oa_phy_data_ram_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Error count change" - }, - { - "name": "ras_gfx.18.2", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "Error count change" - }, - { - "name": "ras_gfx.18.4", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.18.8", - "block": "gfx", - "subblock": "gfx_gds_oa_pipe_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin", - "gdsOaPhy": "1", - "workGroupSizeX": "64", - "workGroupSizeY": "6", - "backend": "drm", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.19.1", - "block": "gfx", - "subblock": "gfx_spi_sr_mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "internal": "1", - "status": "GPU hange without error count change" - }, - { - "name": "ras_gfx.19.8", - "block": "gfx", - "subblock": "gfx_spi_sr_mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "internal": "1", - "status": "GPU hange without error count change" - }, - { - "name": "ras_gfx.20.2", - "block": "gfx", - "subblock": "gfx_sq_sgpr", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.20.4", - "block": "gfx", - "subblock": "gfx_sq_sgpr", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.20.8", - "block": "gfx", - "subblock": "gfx_sq_sgpr", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.21.2", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.21.4", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.21.8", - "block": "gfx", - "subblock": "gfx_sq_lds_d", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.22.2", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.22.4", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.22.8", - "block": "gfx", - "subblock": "gfx_sq_lds_i", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.23.2", - "block": "gfx", - "subblock": "gfx_sq_vgpr", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.23.4", - "block": "gfx", - "subblock": "gfx_sq_vgpr", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.23.8", - "block": "gfx", - "subblock": "gfx_sq_vgpr", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.24.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.24.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.24.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.25.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.25.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.25.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.26.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.26.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.26.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu0_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.27.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.27.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.27.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.28.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.28.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.28.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu1_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "1", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.29.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Error count change" - }, - { - "name": "ras_gfx.29.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.29.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_write_data_buf", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.30.2", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Error count change" - }, - { - "name": "ras_gfx.30.4", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.30.8", - "block": "gfx", - "subblock": "gfx_sqc_data_cu2_utcl1_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "cuIndex": "2", - "status": "Error count change" - }, - { - "name": "ras_gfx.31.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.31.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_tag_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.31.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_tag_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.32.1", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_utcl1_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.32.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_utcl1_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.33.1", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.33.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.34.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.34.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.34.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_banka_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.35.2", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.35.4", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_tag_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.35.8", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_tag_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.36.1", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_hit_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.36.8", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_hit_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.37.1", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.37.8", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.38.1", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_dirty_bit_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "No GPU hang and error counter change, Diag also fail" - }, - { - "name": "ras_gfx.38.8", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_dirty_bit_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "No GPU hang and error counter change, Diag also fail" - }, - { - "name": "ras_gfx.39.2", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.39.4", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.39.8", - "block": "gfx", - "subblock": "gfx_sqc_data_banka_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.40.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.40.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_tag_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.40.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_tag_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.41.1", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_utcl1_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.41.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_utcl1_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.42.1", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.42.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.43.2", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.43.4", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.43.8", - "block": "gfx", - "subblock": "gfx_sqc_inst_bankb_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.44.2", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_tag_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.44.4", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_tag_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.44.8", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_tag_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change with self injection, but TA doesn't work" - }, - { - "name": "ras_gfx.45.1", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_hit_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.45.8", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_hit_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.46.1", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_miss_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.46.8", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_miss_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.47.1", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_dirty_bit_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "No GPU hang and error counter change, Diag also fail" - }, - { - "name": "ras_gfx.47.8", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_dirty_bit_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "addrType": "mtype_uc_sys", - "skip": "1", - "status": "No GPU hang and error counter change, Diag also fail" - }, - { - "name": "ras_gfx.48.2", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_bank_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.48.4", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_bank_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.48.8", - "block": "gfx", - "subblock": "gfx_sqc_data_bankb_bank_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.49.2", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.49.4", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.49.8", - "block": "gfx", - "subblock": "gfx_ta_fs_dfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Error count change" - }, - { - "name": "ras_gfx.50.1", - "block": "gfx", - "subblock": "gfx_ta_fs_afifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.50.8", - "block": "gfx", - "subblock": "gfx_ta_fs_afifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.51.1", - "block": "gfx", - "subblock": "gfx_ta_fl_lfifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.51.8", - "block": "gfx", - "subblock": "gfx_ta_fl_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.52.1", - "block": "gfx", - "subblock": "gfx_ta_fx_lfifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.52.8", - "block": "gfx", - "subblock": "gfx_ta_fx_lfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.53.1", - "block": "gfx", - "subblock": "gfx_ta_fs_cfifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.53.8", - "block": "gfx", - "subblock": "gfx_ta_fs_cfifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.54.1", - "block": "gfx", - "subblock": "gfx_tca_hole_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.54.8", - "block": "gfx", - "subblock": "gfx_tca_hole_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.55.1", - "block": "gfx", - "subblock": "gfx_tca_req_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "20", - "workGroupSizeX": "256", - "gridX": "16", - "internal": "1", - "COMPUTE_STATIC_THREAD_MGMT_SE0_sh0_cu_en": "255", - "status": "Fail" - }, - { - "name": "ras_gfx.55.8", - "block": "gfx", - "subblock": "gfx_tca_req_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "20", - "workGroupSizeX": "256", - "gridX": "16", - "internal": "1", - "COMPUTE_STATIC_THREAD_MGMT_SE0_sh0_cu_en": "255", - "status": "Fail" - }, - { - "name": "ras_gfx.56.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.56.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.56.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.57.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.57.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.57.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_0_1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.58.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.58.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.58.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_0", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.59.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.59.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.59.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_data_bank_1_1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.60.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_0", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.60.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_0", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.60.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_0", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.61.2", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_1", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.61.4", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_1", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.61.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_dirty_bank_1", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.62.2", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.62.4", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.62.8", - "block": "gfx", - "subblock": "gfx_tcc_high_rate_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.63.2", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.63.4", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.63.8", - "block": "gfx", - "subblock": "gfx_tcc_low_rate_tag", - "type": "poison", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.64.1", - "block": "gfx", - "subblock": "gfx_tcc_in_use_dec", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.64.8", - "block": "gfx", - "subblock": "gfx_tcc_in_use_dec", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.65.1", - "block": "gfx", - "subblock": "gfx_tcc_in_use_transfer", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.65.8", - "block": "gfx", - "subblock": "gfx_tcc_in_use_transfer", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.66.1", - "block": "gfx", - "subblock": "gfx_tcc_return_data", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.66.8", - "block": "gfx", - "subblock": "gfx_tcc_return_data", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.67.1", - "block": "gfx", - "subblock": "gfx_tcc_return_control", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "64", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.67.8", - "block": "gfx", - "subblock": "gfx_tcc_return_control", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "64", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.68.1", - "block": "gfx", - "subblock": "gfx_tcc_uc_atomic_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.68.8", - "block": "gfx", - "subblock": "gfx_tcc_uc_atomic_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.69.1", - "block": "gfx", - "subblock": "gfx_tcc_write_return", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.69.8", - "block": "gfx", - "subblock": "gfx_tcc_write_return", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.70.1", - "block": "gfx", - "subblock": "gfx_tcc_write_cache_read", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.70.8", - "block": "gfx", - "subblock": "gfx_tcc_write_cache_read", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "GPU hang with error count change, with internal injection" - }, - { - "name": "ras_gfx.71.2", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.71.4", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.71.8", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "status": "Error count change with internal injection" - }, - { - "name": "ras_gfx.72.1", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo_next_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "internal": "1", - "status": "Error count change with internal injection, trafficed by glMark2" - }, - { - "name": "ras_gfx.72.8", - "block": "gfx", - "subblock": "gfx_tcc_src_fifo_next_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "internal": "1", - "status": "Error count change with internal injection, trafficed by glMark2" - }, - { - "name": "ras_gfx.73.1", - "block": "gfx", - "subblock": "gfx_tcc_cache_tag_probe_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "0", - "addrType": "fb", - "loop": "16", - "status": "Fail with Diag, no error counter change" - }, - { - "name": "ras_gfx.73.8", - "block": "gfx", - "subblock": "gfx_tcc_cache_tag_probe_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "0", - "addrType": "fb", - "loop": "16", - "status": "Fail with Diag, no error counter change" - }, - { - "name": "ras_gfx.74.1", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "loop": "128", - "status": "Error count change" - }, - { - "name": "ras_gfx.74.8", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "5", - "loop": "128", - "status": "Error count change" - }, - { - "name": "ras_gfx.75.1", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo_next_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "addrType": "fb", - "loop": "16", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.75.8", - "block": "gfx", - "subblock": "gfx_tcc_latency_fifo_next_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "1", - "workGroupSizeX": "64", - "gridX": "4", - "internal": "1", - "addrType": "fb", - "loop": "16", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.76.1", - "block": "gfx", - "subblock": "gfx_tcc_wrret_tag_write_return", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "1", - "addrType": "fb", - "loop": "2096", - "skip": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.76.8", - "block": "gfx", - "subblock": "gfx_tcc_wrret_tag_write_return", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "1", - "addrType": "fb", - "loop": "2096", - "skip": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.77.1", - "block": "gfx", - "subblock": "gfx_tcc_atomic_return_buffer", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "1", - "addrType": "fb", - "loop": "2096", - "skip": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.77.8", - "block": "gfx", - "subblock": "gfx_tcc_atomic_return_buffer", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "maxQueueNum": "16", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "1", - "addrType": "fb", - "loop": "2096", - "skip": "1", - "status": "Fail" - }, - { - "name": "ras_gfx.78.1", - "block": "gfx", - "subblock": "gfx_tci_write_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.78.8", - "block": "gfx", - "subblock": "gfx_tci_write_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang without error count change, TA inject failed, should check with FW team" - }, - { - "name": "ras_gfx.79.2", - "block": "gfx", - "subblock": "gfx_tcp_cache_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.79.4", - "block": "gfx", - "subblock": "gfx_tcp_cache_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.79.8", - "block": "gfx", - "subblock": "gfx_tcp_cache_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.80.2", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.80.4", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.80.8", - "block": "gfx", - "subblock": "gfx_tcp_lfifo_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change with glmark2" - }, - { - "name": "ras_gfx.81.1", - "block": "gfx", - "subblock": "gfx_tcp_cmd_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.81.8", - "block": "gfx", - "subblock": "gfx_tcp_cmd_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.82.2", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.82.4", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.82.8", - "block": "gfx", - "subblock": "gfx_tcp_vm_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.83.1", - "block": "gfx", - "subblock": "gfx_tcp_db_ram", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with glmark2" - }, - { - "name": "ras_gfx.83.8", - "block": "gfx", - "subblock": "gfx_tcp_db_ram", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "internal": "1", - "status": "GPU hang with error count change, with glmark2" - }, - { - "name": "ras_gfx.84.2", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.84.4", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.84.8", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo0", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.85.2", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.85.4", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.85.8", - "block": "gfx", - "subblock": "gfx_tcp_utcl1_lfifo1", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tcp_atcl1.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.86.2", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.86.4", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.86.8", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_lo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.87.2", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.87.4", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.87.8", - "block": "gfx", - "subblock": "gfx_td_ss_fifo_hi", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.88.1", - "block": "gfx", - "subblock": "gfx_td_cs_fifo", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.88.8", - "block": "gfx", - "subblock": "gfx_td_cs_fifo", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "loop": "10", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.89.2", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.89.4", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.89.8", - "block": "gfx", - "subblock": "gfx_ea_dramrd_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.90.2", - "block": "gfx", - "subblock": "gfx_ea_dramwr_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.90.4", - "block": "gfx", - "subblock": "gfx_ea_dramwr_cmdmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.90.8", - "block": "gfx", - "subblock": "gfx_ea_dramwr_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.91.2", - "block": "gfx", - "subblock": "gfx_ea_dramwr_datamem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.91.4", - "block": "gfx", - "subblock": "gfx_ea_dramwr_datamem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.91.8", - "block": "gfx", - "subblock": "gfx_ea_dramwr_datamem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.92.2", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.92.4", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.92.8", - "block": "gfx", - "subblock": "gfx_ea_rret_tagmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "0", - "status": "Error count change, but next injection will fail" - }, - { - "name": "ras_gfx.93.2", - "block": "gfx", - "subblock": "gfx_ea_wret_tagmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.93.4", - "block": "gfx", - "subblock": "gfx_ea_wret_tagmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.93.8", - "block": "gfx", - "subblock": "gfx_ea_wret_tagmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "internal": "1", - "status": "Error count change" - }, - { - "name": "ras_gfx.94.2", - "block": "gfx", - "subblock": "gfx_ea_gmird_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.94.4", - "block": "gfx", - "subblock": "gfx_ea_gmird_cmdmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.94.8", - "block": "gfx", - "subblock": "gfx_ea_gmird_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.95.2", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_cmdmem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.95.4", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_cmdmem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.95.8", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.96.2", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_datamem", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.96.4", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_datamem", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.96.8", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_datamem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.97.1", - "block": "gfx", - "subblock": "gfx_ea_dramrd_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "5", - "addrType": "mtype_uc_vid", - "status": "Faild" - }, - { - "name": "ras_gfx.97.8", - "block": "gfx", - "subblock": "gfx_ea_dramrd_pagemem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "5", - "addrType": "mtype_uc_vid", - "status": "Faild" - }, - { - "name": "ras_gfx.98.1", - "block": "gfx", - "subblock": "gfx_ea_dramwr_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Faild" - }, - { - "name": "ras_gfx.98.8", - "block": "gfx", - "subblock": "gfx_ea_dramwr_pagemem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin", - "backend": "kfd", - "queue": "compute", - "status": "Faild" - }, - { - "name": "ras_gfx.99.1", - "block": "gfx", - "subblock": "gfx_ea_iord_cmdmem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.99.8", - "block": "gfx", - "subblock": "gfx_ea_iord_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.100.1", - "block": "gfx", - "subblock": "gfx_ea_iowr_cmdmem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.100.8", - "block": "gfx", - "subblock": "gfx_ea_iowr_cmdmem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.101.1", - "block": "gfx", - "subblock": "gfx_ea_iowr_datamem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.101.8", - "block": "gfx", - "subblock": "gfx_ea_iowr_datamem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "4", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.102.1", - "block": "gfx", - "subblock": "gfx_ea_gmird_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "2", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.102.8", - "block": "gfx", - "subblock": "gfx_ea_gmird_pagemem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "2", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.103.1", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_pagemem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "8", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.103.8", - "block": "gfx", - "subblock": "gfx_ea_gmiwr_pagemem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "8", - "addrType": "sys", - "status": "Faild" - }, - { - "name": "ras_gfx.104.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d0mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.104.8", - "block": "gfx", - "subblock": "gfx_ea_mam_d0mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.105.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d1mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.105.8", - "block": "gfx", - "subblock": "gfx_ea_mam_d1mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.106.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d2mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.106.8", - "block": "gfx", - "subblock": "gfx_ea_mam_d2mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.107.1", - "block": "gfx", - "subblock": "gfx_ea_mam_d3mem", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.107.8", - "block": "gfx", - "subblock": "gfx_ea_mam_d3mem", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "64", - "gridX": "4", - "addrType": "fb", - "internal": "0", - "status": "Failed" - }, - { - "name": "ras_gfx.108.2", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "single_correctable", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "Error count change" - }, - { - "name": "ras_gfx.108.4", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "multi_uncorrectable", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.108.8", - "block": "gfx", - "subblock": "utc_vml2_bank_cache", - "type": "poison", - "backend": "kfd", - "queue": "compute", - "internal": "0", - "status": "GPU hang with error count change" - }, - { - "name": "ras_gfx.109.2", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "internal": "0", - "loop": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.109.4", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "internal": "0", - "loop": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.109.8", - "block": "gfx", - "subblock": "utc_vml2_walker", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_utc_vmwalker_pde_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "512", - "gridX": "1", - "internal": "0", - "loop": "4", - "status": "Error count change" - }, - { - "name": "ras_gfx.110.1", - "block": "gfx", - "subblock": "utc_atcl2_cache_2m_bank", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.110.8", - "block": "gfx", - "subblock": "utc_atcl2_cache_2m_bank", - "type": "parity", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.111.2", - "block": "gfx", - "subblock": "utc_atcl2_cache_4k_bank", - "type": "single_correctable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.111.4", - "block": "gfx", - "subblock": "utc_atcl2_cache_4k_bank", - "type": "multi_uncorrectable", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_gfx.111.8", - "block": "gfx", - "subblock": "utc_atcl2_cache_4k_bank", - "type": "poison", - "dispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin", - "backend": "kfd", - "queue": "compute", - "workGroupSizeX": "256", - "gridX": "64", - "internal": "0", - "loop": "4", - "addrType": "atcMem", - "status": "Failed" - }, - { - "name": "ras_mmhub.0.2", - "block": "mmhub", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_mmhub.0.4", - "block": "mmhub", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "ras_pcie_bif.0.2", - "block": "pcie_bif", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "ras_pcie_bif.0.4", - "block": "pcie_bif", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "xgmi_wafl.0.2", - "block": "xgmi_wafl", - "subblock": "xgmi", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "xgmi_wafl.0.4", - "block": "xgmi_wafl", - "subblock": "xgmi", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - }, - { - "name": "xgmi_wafl.1.2", - "block": "xgmi_wafl", - "subblock": "wafl", - "type": "single_correctable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "Error count change" - }, - { - "name": "xgmi_wafl.1.4", - "block": "xgmi_wafl", - "subblock": "wafl", - "type": "multi_uncorrectable", - "nullDispatchCS": "sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin", - "status": "GPU Hang" - } - ] -} \ No newline at end of file diff --git a/ras_prebuild/librdc_ras.so b/ras_prebuild/librdc_ras.so deleted file mode 100755 index 8778e4de89168791fe8d524672f3e43ae819c89c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2691361 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�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%0DpH|JmgeujLUC1+UuO|90fctHG!PkpTuP613MaN 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⁢?UPuU3Nofsxr)^k_PVzO5-bfJI#a$J6iN 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

a)ys_%@eB?6LDaZG>lZZL}rF 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

)`G>{o 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 z

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 diff --git a/ras_prebuild/sp3/gfx10/edc/bin/sienna_cichlid/gc_edc_sqc_inst_bank_snop.bin b/ras_prebuild/sp3/gfx10/edc/bin/sienna_cichlid/gc_edc_sqc_inst_bank_snop.bin deleted file mode 100644 index 57ec7404bf5fc3c02fdf992931367f81ce693c5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4084 zcmZQ$U|`_U0}?>M3#Emiv@npK#LU2;0p)7}X|FjqiJAZ(*OfQ<9-H)`4|`g|LpN0 diff --git a/ras_prebuild/sp3/gfx10/edc/sienna_cichlid/gc_edc_sqc_inst_bank_snop.sp3 b/ras_prebuild/sp3/gfx10/edc/sienna_cichlid/gc_edc_sqc_inst_bank_snop.sp3 deleted file mode 100644 index 08cad4a938..0000000000 --- a/ras_prebuild/sp3/gfx10/edc/sienna_cichlid/gc_edc_sqc_inst_bank_snop.sp3 +++ /dev/null @@ -1,31 +0,0 @@ -shader main -asic(GFX10) -wave_size(32) -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -for var i = 0; i < 1000; i++ - s_nop 0x1 -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_clear_vgpr_lds_arcturus.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_clear_vgpr_lds_arcturus.sp3 deleted file mode 100644 index ad50ccc374..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_clear_vgpr_lds_arcturus.sp3 +++ /dev/null @@ -1,42 +0,0 @@ -shader main -type(CS) -user_sgpr_count(0) - - // Clear ACC VGPR - for var vgpr = 0; vgpr < 256; ++vgpr - v_accvgpr_write acc[vgpr], 0 - end - - s_movk_i32 m0, 0x0000 - s_mov_b32 s10, 0x000000f8 - s_set_gpr_idx_on s10, 0x8 -label_0004: - v_mov_b32 v0, 0 - v_mov_b32 v1, 0 - v_mov_b32 v2, 0 - v_mov_b32 v3, 0 - v_mov_b32 v4, 0 - v_mov_b32 v5, 0 - v_mov_b32 v6, 0 - v_mov_b32 v7, 0 - s_sub_u32 s10, s10, 8 - s_set_gpr_idx_idx s10 - s_cbranch_scc0 label_0004 - s_set_gpr_idx_off - v_mbcnt_lo_u32_b32 v1, exec_hi, 0 - v_mbcnt_hi_u32_b32 v1, exec_lo, v1 - v_mul_u32_u24 v1, 8, v1 - s_getreg_b32 s11, hwreg(HW_REG_HW_ID, 4, 2) - s_mulk_i32 s11, 0x4000 - v_add_co_u32 v1, vcc, v1, s11 - s_mov_b32 s10, 7 - s_mov_b32 m0, -1 -label_001B: - ds_write2_b64 v1, v[2:3], v[2:3] offset1:64 - ds_write2_b64 v1, v[4:5], v[4:5] offset0:128 offset1:192 - v_add_co_u32 v1, vcc, 0x00000800, v1 - s_sub_u32 s10, s10, 1 - s_cbranch_scc0 label_001B - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_compute.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_compute.sp3 deleted file mode 100644 index 6b9aa3b887..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_compute.sp3 +++ /dev/null @@ -1,113 +0,0 @@ -shader main -type(CS) -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - //s[0:1] the mmeory address for the buffer resource - //s2 x - //s3 x*y - //s4 x*y*z - //s5 X - //s6 X*Y - //s7 output offset - //s8 loop - - tgid_x_en(1) //s_tgid_x s9 - tgid_y_en(1) //s_tgid_y s10 - tgid_z_en(1) //s_tgid_z s11 - - //vo for tid_x - //v1 for tid_y - //v2 for tid_z - - // Clear ACC VGPR - for var vgpr = 0; vgpr < 256; ++vgpr - v_accvgpr_write acc[vgpr], 0 - end - - //sp3 loop for lifetime - s_mov_b32 s12, 0 //init loop idx s12 -label_0001: - s_cmp_lt_i32 s12, s8 //scc = (s12 < s8) ? 1 : 0 - s_cbranch_scc0 label_0006 //if(scc == 0) then jump to label_0006; else nop - v_mov_b32 v4,s12 - s_add_i32 s12, s12, 1 //add loop incr - s_branch label_0001 -label_0006: //end of SP3 loop - - //fetch the buffer resource through SQC - s_load_dwordx4 s[24:27], s[0:1], 0x0 - s_waitcnt 0 - - s_load_dwordx4 s[40:43], s[0:1], 0x20 - s_waitcnt 0 - - // v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x - v_mad_u32_u24 v3, v1, s2, v0 - v_mad_u32_u24 v3, v2, s3, v3 - - //s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x - s_mul_i32 s28, s_tgid_y, s5 - s_add_i32 s28, s28, s_tgid_x - s_mul_i32 s29, s6, s_tgid_z - s_add_i32 s28, s29, s28 - - //v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group - v_mov_b32 v9, s28 - v_mad_u32_u24 v9, v9, s4, v3 - - // Clear VGPR and LDS - s_movk_i32 m0, 0x0000 - s_mov_b32 s12, 0x000000f8 - s_set_gpr_idx_on s12, 0x8 -label_0004: - v_mov_b32 v0, 0 - v_mov_b32 v1, 0 - v_mov_b32 v2, 0 - v_mov_b32 v3, 0 - v_mov_b32 v4, 0 - v_mov_b32 v5, 0 - v_mov_b32 v6, 0 - v_mov_b32 v7, 0 - s_sub_u32 s12, s12, 8 - s_set_gpr_idx_idx s12 - s_cbranch_scc0 label_0004 - s_set_gpr_idx_off - v_mbcnt_lo_u32_b32 v1, exec_hi, 0 - v_mbcnt_hi_u32_b32 v1, exec_lo, v1 - v_mul_u32_u24 v1, 8, v1 - s_getreg_b32 s13, hwreg(HW_REG_HW_ID, 4, 2) - s_mulk_i32 s13, 0x4000 - v_add_co_u32 v1, vcc, v1, s13 - s_mov_b32 s12, 7 - s_mov_b32 m0, -1 -label_001B: - ds_write2_b64 v1, v[2:3], v[2:3] offset1:64 - ds_write2_b64 v1, v[4:5], v[4:5] offset0:128 offset1:192 - v_add_co_u32 v1, vcc, 0x00000800, v1 - s_sub_u32 s12, s12, 1 - s_cbranch_scc0 label_001B - - // Save coverage in the memory - s_getreg_b32 s20, hwreg(HW_REG_HW_ID, 0, 32) - // s12 = SIMD - s_lshr_b32 s12,s20,4 - s_and_b32 s12, s12, 0x3 - // s13 = CU - s_lshr_b32 s13,s20,8 - s_and_b32 s13, s13, 0xf - // s14 = SE - s_lshr_b32 s14,s20,13 - s_and_b32 s14, s14, 0x7 - // s15 = SE * 16 * 4 + CU * 4 + SIMD - s_mul_i32 s16, s14, 64 - s_mul_i32 s17, s13, 4 - s_add_i32 s15, s16, s17 - s_add_i32 s15, s15, s12 - s_mul_i32 s16, s15, 4 - - s_buffer_store_dword s15, s24, s16 glc - s_waitcnt 0 - - s_buffer_load_dword s17, s24, s16 glc - s_waitcnt 0 -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq.sp3 deleted file mode 100644 index e1554afa66..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq.sp3 +++ /dev/null @@ -1,59 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -v_mov_b32 v10, v0 -//buffer_load_dword v10, v9, s24, s31 idxen:1 glc:1 -//s_waitcnt 0 -//v_mov_b32 v11, v1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq_gds_read.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq_gds_read.sp3 deleted file mode 100644 index a80ea56817..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cp_sq_gds_read.sp3 +++ /dev/null @@ -1,60 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -//read from the GDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 - -v_mov_b32 v12, v11 - -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cs_trap_handler.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cs_trap_handler.sp3 deleted file mode 100644 index 5e4eb34c79..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_cs_trap_handler.sp3 +++ /dev/null @@ -1,673 +0,0 @@ -shader main - -type(CS) - -/*************************************************************************/ -/* control on how to run the shader */ -/*************************************************************************/ -//any hack that needs to be made to run this code in EMU (either becasue various EMU code are not ready or no compute save & restore in EMU run) -var EMU_RUN_HACK = 1 -var EMU_RUN_HACK_RESTORE_NORMAL = 0 -var EMU_RUN_HACK_SAVE_NORMAL_EXIT = 0 -var EMU_RUN_HACK_SAVE_SINGLE_WAVE = 0 -var EMU_RUN_HACK_SAVE_FIRST_TIME = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_LO = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_HI = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var SAVE_LDS = 0 -var WG_BASE_ADDR_LO = 0x9000a000 -var WG_BASE_ADDR_HI = 0x0 -var WAVE_SPACE = 0x5000 //memory size that each wave occupies in workgroup state mem -var CTX_SAVE_CONTROL = 0x0 -var CTX_RESTORE_CONTROL = CTX_SAVE_CONTROL -var SIM_RUN_HACK = 0 //any hack that needs to be made to run this code in SIM (either becasue various RTL code are not ready or no compute save & restore in RTL run) -var SGPR_SAVE_USE_SQC = 0 //use SQC D$ to do the write -var USE_MTBUF_INSTEAD_OF_MUBUF = 0 //need to change BUF_DATA_FORMAT in S_SAVE_BUF_RSRC_WORD3_MISC from 0 to BUF_DATA_FORMAT_32 if set to 1 (i.e. 0x00827FAC) -var SWIZZLE_EN = 0 //whether we use swizzled buffer addressing - -/**************************************************************************/ -/* variables */ -/**************************************************************************/ -var SQ_WAVE_STATUS_INST_ATC_SHIFT = 23 -var SQ_WAVE_STATUS_INST_ATC_MASK = 0x00800000 - -var SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT = 12 -var SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE = 9 -var SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT = 8 -var SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE = 6 -var SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT = 24 -var SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE = 3 //FIXME sq.blk still has 4 bits at this time while SQ programming guide has 3 bits - -var SQ_WAVE_TRAPSTS_SAVECTX_MASK = 0x400 -var SQ_WAVE_TRAPSTS_SAVECTX_SHIFT = 10 -var SQ_WAVE_TRAPSTS_MEM_VIOL_MASK = 0x100 -var SQ_WAVE_TRAPSTS_MEM_VIOL_SHIFT = 8 -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_MASK = 0x3FF -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_SHIFT = 0x0 -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_SIZE = 10 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_MASK = 0xFFFFF800 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT = 11 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_SIZE = 21 - -var SQ_WAVE_IB_STS_RCNT_SHIFT = 16 //FIXME -var SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT = 15 //FIXME -var SQ_WAVE_IB_STS_RCNT_FIRST_REPLAY_MASK_NEG = 0x00007FFF //FIXME - -var SQ_BUF_RSRC_WORD1_ATC_SHIFT = 24 -var SQ_BUF_RSRC_WORD3_MTYPE_SHIFT = 27 - - -/* Save */ -var S_SAVE_BUF_RSRC_WORD1_STRIDE = 0x00040000 //stride is 4 bytes -var S_SAVE_BUF_RSRC_WORD3_MISC = 0x00807FAC //SQ_SEL_X/Y/Z/W, BUF_NUM_FORMAT_FLOAT, (0 for MUBUF stride[17:14] when ADD_TID_ENABLE and BUF_DATA_FORMAT_32 for MTBUF), ADD_TID_ENABLE - -var S_SAVE_SPI_INIT_ATC_MASK = 0x08000000 //bit[27]: ATC bit -var S_SAVE_SPI_INIT_ATC_SHIFT = 27 -var S_SAVE_SPI_INIT_MTYPE_MASK = 0x70000000 //bit[30:28]: Mtype -var S_SAVE_SPI_INIT_MTYPE_SHIFT = 28 -var S_SAVE_SPI_INIT_FIRST_WAVE_MASK = 0x04000000 //bit[26]: FirstWaveInTG -var S_SAVE_SPI_INIT_FIRST_WAVE_SHIFT = 26 - -var S_SAVE_PC_HI_RCNT_SHIFT = 28 //FIXME check with Brian to ensure all fields other than PC[47:0] can be used -var S_SAVE_PC_HI_RCNT_MASK = 0xF0000000 //FIXME -var S_SAVE_PC_HI_FIRST_REPLAY_SHIFT = 27 //FIXME -var S_SAVE_PC_HI_FIRST_REPLAY_MASK = 0x08000000 //FIXME - -var s_save_spi_init_lo = exec_lo -var s_save_spi_init_hi = exec_hi - - //tba_lo and tba_hi need to be saved/restored -var tba_lo = ttmp12 -var tba_hi = ttmp13 -var tma_lo = ttmp14 -var tma_hi = ttmp15 - -var s_save_pc_lo = ttmp0 //{TTMP1, TTMP0} = {3¡¯h0,pc_rewind[3:0], HT[0],trapID[7:0], PC[47:0]} -var s_save_pc_hi = ttmp1 -var s_save_exec_lo = ttmp2 -var s_save_exec_hi = ttmp3 -var s_save_status = ttmp4 -var s_save_trapsts = ttmp5 //not really used until the end of the SAVE routine -var s_save_xnack_mask_lo = ttmp6 -var s_save_xnack_mask_hi = ttmp7 -var s_save_buf_rsrc0 = ttmp8 -var s_save_buf_rsrc1 = ttmp9 -var s_save_buf_rsrc2 = ttmp10 -var s_save_buf_rsrc3 = ttmp11 - -var s_save_mem_offset = tma_lo -var s_save_alloc_size = s_save_trapsts //conflict -var s_save_tmp = s_save_buf_rsrc2 //shared with s_save_buf_rsrc2 (conflict: should not use mem access with s_save_tmp at the same time) -var s_save_m0 = tma_hi - -/* Restore */ -var S_RESTORE_BUF_RSRC_WORD1_STRIDE = S_SAVE_BUF_RSRC_WORD1_STRIDE -var S_RESTORE_BUF_RSRC_WORD3_MISC = S_SAVE_BUF_RSRC_WORD3_MISC - -var S_RESTORE_SPI_INIT_ATC_MASK = 0x08000000 //bit[27]: ATC bit -var S_RESTORE_SPI_INIT_ATC_SHIFT = 27 -var S_RESTORE_SPI_INIT_MTYPE_MASK = 0x70000000 //bit[30:28]: Mtype -var S_RESTORE_SPI_INIT_MTYPE_SHIFT = 28 -var S_RESTORE_SPI_INIT_FIRST_WAVE_MASK = 0x04000000 //bit[26]: FirstWaveInTG -var S_RESTORE_SPI_INIT_FIRST_WAVE_SHIFT = 26 - -var S_RESTORE_PC_HI_RCNT_SHIFT = S_SAVE_PC_HI_RCNT_SHIFT -var S_RESTORE_PC_HI_RCNT_MASK = S_SAVE_PC_HI_RCNT_MASK -var S_RESTORE_PC_HI_FIRST_REPLAY_SHIFT = S_SAVE_PC_HI_FIRST_REPLAY_SHIFT -var S_RESTORE_PC_HI_FIRST_REPLAY_MASK = S_SAVE_PC_HI_FIRST_REPLAY_MASK - -var s_restore_spi_init_lo = exec_lo -var s_restore_spi_init_hi = exec_hi - -var s_restore_mem_offset = ttmp2 -var s_restore_alloc_size = ttmp3 -var s_restore_tmp = ttmp6 //tba_lo/hi need to be restored -var s_restore_mem_offset_save = s_restore_tmp //no conflict - -var s_restore_m0 = s_restore_alloc_size //no conflict - -var s_restore_mode = ttmp7 - -var s_restore_pc_lo = ttmp0 -var s_restore_pc_hi = ttmp1 -var s_restore_exec_lo = tma_lo //no conflict -var s_restore_exec_hi = tma_hi //no conflict -var s_restore_status = ttmp4 -var s_restore_trapsts = ttmp5 -var s_restore_xnack_mask_lo = xnack_mask_lo -var s_restore_xnack_mask_hi = xnack_mask_hi -var s_restore_buf_rsrc0 = ttmp8 -var s_restore_buf_rsrc1 = ttmp9 -var s_restore_buf_rsrc2 = ttmp10 -var s_restore_buf_rsrc3 = ttmp11 - -/**************************************************************************/ -/* trap handler entry points */ -/**************************************************************************/ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) //hack to use trap_id for determining save/restore - //FIXME VCCZ un-init assertion s_getreg_b32 s_save_status, hwreg(HW_REG_STATUS) //save STATUS since we will change SCC - s_and_b32 s_save_tmp, s_save_pc_hi, 0xffff0000 //change SCC - s_cmp_eq_u32 s_save_tmp, 0x007e0000 //Save: trap_id = 0x7e. Restore: trap_id = 0x7f. - s_cbranch_scc0 L_JUMP_TO_RESTORE //do not need to recover STATUS here since we are going to RESTORE - //FIXME s_setreg_b32 hwreg(HW_REG_STATUS), s_save_status //need to recover STATUS since we are going to SAVE - s_branch L_SKIP_RESTORE //NOT restore, SAVE actually - else - s_branch L_SKIP_RESTORE //NOT restore. might be a regular trap or save - end - -L_JUMP_TO_RESTORE: - s_branch L_RESTORE //restore - -L_SKIP_RESTORE: - - s_getreg_b32 s_save_status, hwreg(HW_REG_STATUS) //save STATUS since we will change SCC - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - s_and_b32 s_save_trapsts, s_save_trapsts, SQ_WAVE_TRAPSTS_SAVECTX_MASK //check whether this is for save - s_cbranch_scc1 L_SAVE //this is the operation for save - //the poential code (such as restore STATUS) on this path is for regular trap handling and don't care for compute save & restore - - //EMU will not execute the code since in hack mode it is skipped while in normal mode there is no save in EMU - //SIM will only execute the code in normal S/R mode but not in hack mode - if (!EMU_RUN_HACK) - L_ERROR: //to catch incorrect savectx setting in SIM assuming the trap handler is only used for save & restore - s_branch L_ERROR - end - -/**************************************************************************/ -/* save routine */ -/**************************************************************************/ - -L_SAVE: - - //check whether there is mem_viol - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - s_and_b32 s_save_trapsts, s_save_trapsts, SQ_WAVE_TRAPSTS_MEM_VIOL_MASK - s_cbranch_scc0 L_NO_PC_REWIND - - //if so, need rewind PC assuming GDS operation gets NACKed - s_mov_b32 s_save_tmp, 0 //clear mem_viol bit - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_MEM_VIOL_SHIFT, 1), s_save_tmp //clear mem_viol bit - s_and_b32 s_save_pc_hi, s_save_pc_hi, 0x0000ffff //pc[47:32] - s_sub_u32 s_save_pc_lo, s_save_pc_lo, 8 //pc[31:0]-8 - s_subb_u32 s_save_pc_hi, s_save_pc_hi, 0x0 // -scc - -L_NO_PC_REWIND: - s_mov_b32 s_save_tmp, 0 //clear saveCtx bit - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_SAVECTX_SHIFT, 1), s_save_tmp //clear saveCtx bit - - s_mov_b32 s_save_xnack_mask_lo, xnack_mask_lo //save XNACK_MASK - s_mov_b32 s_save_xnack_mask_hi, xnack_mask_hi - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS, SQ_WAVE_IB_STS_RCNT_SHIFT, SQ_WAVE_IB_STS_RCNT_SIZE) //save RCNT - s_lshl_b32 s_save_tmp, s_save_tmp, S_SAVE_PC_HI_RCNT_SHIFT - s_or_b32 s_save_pc_hi, s_save_pc_hi, s_save_tmp - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS, SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT, SQ_WAVE_IB_STS_FIRST_REPLAY_SIZE) //save FIRST_REPLAY - s_lshl_b32 s_save_tmp, s_save_tmp, S_SAVE_PC_HI_FIRST_REPLAY_SHIFT - s_or_b32 s_save_pc_hi, s_save_pc_hi, s_save_tmp - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS) //clear RCNT and FIRST_REPLAY in IB_STS - s_and_b32 s_save_tmp, s_save_tmp, SQ_WAVE_IB_STS_RCNT_FIRST_REPLAY_MASK_NEG - - s_setreg_b32 hwreg(HW_REG_IB_STS), s_save_tmp - - /* inform SPI the readiness and wait for SPI's go signal */ - s_mov_b32 s_save_exec_lo, exec_lo //save EXEC and use EXEC for the go signal from SPI - s_mov_b32 s_save_exec_hi, exec_hi - s_mov_b64 exec, 0x0 //clear EXEC to get ready to receive - if (EMU_RUN_HACK) - - else - s_sendmsg sendmsg(MSG_SAVEWAVE) //send SPI a message and wait for SPI's write to EXEC - end - - L_SLEEP: - s_sleep 0x2 - - if (EMU_RUN_HACK) - - else - s_cbranch_execz L_SLEEP - end - - - /* setup Resource Contants */ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_SAVE_SINGLE_WAVE)) - //calculate wd_addr using absolute thread id - v_readlane_b32 s_save_tmp, v9, 0 - s_lshr_b32 s_save_tmp, s_save_tmp, 6 - s_mul_i32 s_save_tmp, s_save_tmp, WAVE_SPACE - s_add_i32 s_save_spi_init_lo, s_save_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_save_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_save_spi_init_hi, s_save_spi_init_hi, CTX_SAVE_CONTROL - else - end - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_SAVE_SINGLE_WAVE)) - s_add_i32 s_save_spi_init_lo, s_save_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_save_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_save_spi_init_hi, s_save_spi_init_hi, CTX_SAVE_CONTROL - else - end - - - s_mov_b32 s_save_buf_rsrc0, s_save_spi_init_lo //base_addr_lo - s_and_b32 s_save_buf_rsrc1, s_save_spi_init_hi, 0x0000FFFF //base_addr_hi - s_or_b32 s_save_buf_rsrc1, s_save_buf_rsrc1, S_SAVE_BUF_RSRC_WORD1_STRIDE - s_mov_b32 s_save_buf_rsrc2, 0 //NUM_RECORDS initial value = 0 (in bytes) although not neccessarily inited - s_mov_b32 s_save_buf_rsrc3, S_SAVE_BUF_RSRC_WORD3_MISC - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_ATC_MASK - s_lshr_b32 s_save_tmp, s_save_tmp, (S_SAVE_SPI_INIT_ATC_SHIFT-SQ_BUF_RSRC_WORD1_ATC_SHIFT) //get ATC bit into position - s_or_b32 s_save_buf_rsrc3, s_save_buf_rsrc3, s_save_tmp //or ATC - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_MTYPE_MASK - s_lshr_b32 s_save_tmp, s_save_tmp, (S_SAVE_SPI_INIT_MTYPE_SHIFT-SQ_BUF_RSRC_WORD3_MTYPE_SHIFT) //get MTYPE bits into position - s_or_b32 s_save_buf_rsrc3, s_save_buf_rsrc3, s_save_tmp //or MTYPE - - //FIXME right now s_save_m0/s_save_mem_offset use tma_lo/tma_hi (might need to save them before using them?) - s_mov_b32 s_save_m0, m0 //save M0 - - /* global mem offset */ - s_mov_b32 s_save_mem_offset, 0x0 //mem offset initial value = 0 - - - /* the first wave in the threadgroup */ - s_barrier //FIXME not performance-optimal "LDS is used? wait for other waves in the same TG" - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_FIRST_WAVE_MASK //exec is still used here - s_cbranch_scc0 L_SAVE_VGPR - - /* save LDS */ - ////////////////////////////// - L_SAVE_LDS: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_LDS_ALLOC,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE) //lds_size - s_and_b32 s_save_alloc_size, s_save_alloc_size, 0xFFFFFFFF //lds_size is zero? - s_cbranch_scc0 L_SAVE_VGPR //no lds used? jump to L_SAVE_VGPR - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 6 //LDS size in dwords = lds_size * 64dw - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 2 //LDS size in bytes - s_mov_b32 s_save_buf_rsrc2, s_save_alloc_size //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 m0, 0x0 //lds_offset initial value = 0 - - L_SAVE_LDS_LOOP: - if (SAVE_LDS) - buffer_store_lds_dword s_save_buf_rsrc0, s_save_mem_offset lds:1 - end - s_add_u32 m0, m0, 256 //every buffer_store_lds does 256 bytes - s_add_u32 s_save_mem_offset, s_save_mem_offset, 256 //mem offset increased by 256 bytes - s_cmp_lt_u32 m0, s_save_alloc_size //scc=(m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_LDS_LOOP //LDS save is complete? - - - /* save VGPRs */ - ////////////////////////////// - L_SAVE_VGPR: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE) //vpgr_size - s_add_u32 s_save_alloc_size, s_save_alloc_size, 1 - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 2 //Number of VGPRs = (vgpr_size + 1) * 4 (non-zero value) //FIXME for GFX, zero is possible - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 8 //NUM_RECORDS in bytes (64 threads*4) - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - s_mov_b32 m0, 0x0 //VGPR initial index value =0 - s_set_gpr_idx_on m0, 0x1 //M0[7:0] = M0[7:0] and M0[15:12] = 0x1 - s_add_u32 s_save_alloc_size, s_save_alloc_size, 0x1000 //add 0x1000 since we compare m0 against it later - - L_SAVE_VGPR_LOOP: - v_mov_b32 v0, v0 //v0 = v[0+m0] - - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_store_format_x v0, v0, s_save_buf_rsrc0, s_save_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_store_dword v0, v0, s_save_buf_rsrc0, s_save_mem_offset slc:1 glc:1 - end - - s_add_u32 m0, m0, 1 //next vgpr index - s_add_u32 s_save_mem_offset, s_save_mem_offset, 256 //every buffer_store_dword does 256 bytes - s_cmp_lt_u32 m0, s_save_alloc_size //scc = (m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_VGPR_LOOP //VGPR save is complete? - s_set_gpr_idx_off - - /* save SGPRs */ - ////////////////////////////// - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE) //spgr_size - s_add_u32 s_save_alloc_size, s_save_alloc_size, 1 - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 4 //Number of SGPRs = (sgpr_size + 1) * 16 (non-zero value) - - if (SGPR_SAVE_USE_SQC) - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 2 //NUM_RECORDS in bytes - else - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 8 //NUM_RECORDS in bytes (64 threads) - end - - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - s_mov_b32 m0, 0x0 //SGPR initial index value =0 - s_nop 0x0 //Manually inserted wait states - - L_SAVE_SGPR_LOOP: - s_movrels_b32 s0, s0 //s0 = s[0+m0] - write_sgpr_to_mem(s0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //PV: the best performance should be using s_buffer_store_dwordx4 - s_add_u32 m0, m0, 1 //next sgpr index - s_cmp_lt_u32 m0, s_save_alloc_size //scc = (m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_SGPR_LOOP //SGPR save is complete? - - /* save HW registers */ - ////////////////////////////// - L_SAVE_HWREG: - s_mov_b32 s_save_buf_rsrc2, 0x4 //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - - write_sgpr_to_mem(s_save_m0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //M0 - - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_SAVE_FIRST_TIME)) - s_add_u32 s_save_pc_lo, s_save_pc_lo, 4 //pc[31:0]+4 - s_addc_u32 s_save_pc_hi, s_save_pc_hi, 0x0 //carry bit over - s_mov_b32 tba_lo, EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_LO - s_mov_b32 tba_hi, EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_HI - end - - write_sgpr_to_mem(s_save_pc_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //PC - write_sgpr_to_mem(s_save_pc_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - write_sgpr_to_mem(s_save_exec_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //EXEC - write_sgpr_to_mem(s_save_exec_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - write_sgpr_to_mem(s_save_status, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //STATUS - - //s_save_trapsts conflicts with s_save_alloc_size - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - write_sgpr_to_mem(s_save_trapsts, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TRAPSTS - - write_sgpr_to_mem(s_save_xnack_mask_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //XNACK_MASK_LO - write_sgpr_to_mem(s_save_xnack_mask_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //XNACK_MASK_HI - - //use s_save_tmp would introduce conflict here between s_save_tmp and s_save_buf_rsrc2 - s_getreg_b32 s_save_m0, hwreg(HW_REG_MODE) //MODE - write_sgpr_to_mem(s_save_m0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - - write_sgpr_to_mem(tba_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TBA_LO - write_sgpr_to_mem(tba_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TBA_HI - - /* S_PGM_END_SAVED */ //FIXME graphics ONLY - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_SAVE_NORMAL_EXIT)) - s_and_b32 s_save_pc_hi, s_save_pc_hi, 0x0000ffff //pc[47:32] - s_add_u32 s_save_pc_lo, s_save_pc_lo, 4 //pc[31:0]+4 - s_addc_u32 s_save_pc_hi, s_save_pc_hi, 0x0 //carry bit over - s_rfe_b64 s_save_pc_lo //Return to the main shader program - else - end - - - s_branch L_END_PGM - - - -/**************************************************************************/ -/* restore routine */ -/**************************************************************************/ - -L_RESTORE: - /* Setup Resource Contants */ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) - //calculate wd_addr using absolute thread id - v_readlane_b32 s_restore_tmp, v9, 0 - s_lshr_b32 s_restore_tmp, s_restore_tmp, 6 - s_mul_i32 s_restore_tmp, s_restore_tmp, WAVE_SPACE - s_add_i32 s_restore_spi_init_lo, s_restore_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_restore_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_restore_spi_init_hi, s_restore_spi_init_hi, CTX_RESTORE_CONTROL - else - end - - s_mov_b32 s_restore_buf_rsrc0, s_restore_spi_init_lo //base_addr_lo - s_and_b32 s_restore_buf_rsrc1, s_restore_spi_init_hi, 0x0000FFFF //base_addr_hi - s_or_b32 s_restore_buf_rsrc1, s_restore_buf_rsrc1, S_RESTORE_BUF_RSRC_WORD1_STRIDE - s_mov_b32 s_restore_buf_rsrc2, 0 //NUM_RECORDS initial value = 0 (in bytes) - s_mov_b32 s_restore_buf_rsrc3, S_RESTORE_BUF_RSRC_WORD3_MISC - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_ATC_MASK - s_lshr_b32 s_restore_tmp, s_restore_tmp, (S_RESTORE_SPI_INIT_ATC_SHIFT-SQ_BUF_RSRC_WORD1_ATC_SHIFT) //get ATC bit into position - s_or_b32 s_restore_buf_rsrc3, s_restore_buf_rsrc3, s_restore_tmp //or ATC - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_MTYPE_MASK - s_lshr_b32 s_restore_tmp, s_restore_tmp, (S_RESTORE_SPI_INIT_MTYPE_SHIFT-SQ_BUF_RSRC_WORD3_MTYPE_SHIFT) //get MTYPE bits into position - s_or_b32 s_restore_buf_rsrc3, s_restore_buf_rsrc3, s_restore_tmp //or MTYPE - - /* global mem offset */ - s_mov_b32 s_restore_mem_offset, 0x0 //mem offset initial value = 0 - - /* the first wave in the threadgroup */ - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_FIRST_WAVE_MASK - s_cbranch_scc0 L_RESTORE_VGPR - - /* restore LDS */ - ////////////////////////////// - L_RESTORE_LDS: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on //be consistent with SAVE although can be moved ahead - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_LDS_ALLOC,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE) //lds_size - s_and_b32 s_restore_alloc_size, s_restore_alloc_size, 0xFFFFFFFF //lds_size is zero? - s_cbranch_scc0 L_RESTORE_VGPR //no lds used? jump to L_RESTORE_VGPR - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 6 //LDS size in dwords = lds_size * 64dw - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 2 //LDS size in bytes - s_mov_b32 s_restore_buf_rsrc2, s_restore_alloc_size //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 m0, 0x0 //lds_offset initial value = 0 - - L_RESTORE_LDS_LOOP: - if (SAVE_LDS) - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset lds:1 - end - s_add_u32 m0, m0, 256 //every buffer_load_dword does 256 bytes - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 //mem offset increased by 256 bytes - s_cmp_lt_u32 m0, s_restore_alloc_size //scc=(m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_LDS_LOOP //LDS restore is complete? - - - /* restore VGPRs */ - ////////////////////////////// - L_RESTORE_VGPR: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on //be consistent with SAVE although can be moved ahead - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE) //vpgr_size - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 1 - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 2 //Number of VGPRs = (vgpr_size + 1) * 4 (non-zero value) - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 8 //NUM_RECORDS in bytes (64 threads*4) - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 s_restore_mem_offset_save, s_restore_mem_offset // restore start with v1, v0 will be the last - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 - s_mov_b32 m0, 1 //VGPR initial index value = 1 - s_set_gpr_idx_on m0, 0x8 //M0[7:0] = M0[7:0] and M0[15:12] = 0x8 - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 0x8000 //add 0x8000 since we compare m0 against it later - - L_RESTORE_VGPR_LOOP: - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_load_format_x v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset slc:1 glc:1 - end - s_waitcnt vmcnt(0) //ensure data ready - v_mov_b32 v0, v0 //v[0+m0] = v0 - s_add_u32 m0, m0, 1 //next vgpr index - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 //every buffer_load_dword does 256 bytes - s_cmp_lt_u32 m0, s_restore_alloc_size //scc = (m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_VGPR_LOOP //VGPR restore (except v0) is complete? - s_set_gpr_idx_off - /* VGPR restore on v0 */ - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_load_format_x v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset_save format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset_save slc:1 glc:1 - end - - - /* restore SGPRs */ - ////////////////////////////// - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE) //spgr_size - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 1 - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 4 //Number of SGPRs = (sgpr_size + 1) * 16 (non-zero value) - - if (SGPR_SAVE_USE_SQC) - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 2 //NUM_RECORDS in bytes - else - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 8 //NUM_RECORDS in bytes (64 threads) - end - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - read_sgpr_from_mem(s_restore_tmp, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //save s0 to s_restore_tmp - s_mov_b32 m0, 0x1 //SGPR initial index value =1 //go on with with s1 - - L_RESTORE_SGPR_LOOP: - read_sgpr_from_mem(s0, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //PV: further performance improvement can be made - s_waitcnt lgkmcnt(0) //ensure data ready - s_movreld_b32 s0, s0 //s[0+m0] = s0 - s_add_u32 m0, m0, 1 //next sgpr index - s_cmp_lt_u32 m0, s_restore_alloc_size //scc = (m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_SGPR_LOOP //SGPR restore (except s0) is complete? - s_mov_b32 s0, s_restore_tmp /* SGPR restore on s0 */ - - /* restore HW registers */ - ////////////////////////////// - L_RESTORE_HWREG: - s_mov_b32 s_restore_buf_rsrc2, 0x4 //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - read_sgpr_from_mem(s_restore_m0, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //M0 - read_sgpr_from_mem(s_restore_pc_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //PC - read_sgpr_from_mem(s_restore_pc_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) - read_sgpr_from_mem(s_restore_exec_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //EXEC - read_sgpr_from_mem(s_restore_exec_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) - read_sgpr_from_mem(s_restore_status, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //STATUS - read_sgpr_from_mem(s_restore_trapsts, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TRAPSTS - read_sgpr_from_mem(xnack_mask_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //XNACK_MASK_LO - read_sgpr_from_mem(xnack_mask_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //XNACK_MASK_HI - read_sgpr_from_mem(s_restore_mode, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //MODE - read_sgpr_from_mem(tba_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TBA_LO - read_sgpr_from_mem(tba_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TBA_HI - - s_waitcnt lgkmcnt(0) //from now on, it is safe to restore STATUS and IB_STS - - s_and_b32 s_restore_pc_hi, s_restore_pc_hi, 0x0000ffff //pc[47:32] //Do it here in order not to affect STATUS - - //for normal save & restore, the saved PC points to the next inst to execute, no adjustment needs to be made, otherwise: - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) - s_add_u32 s_restore_pc_lo, s_restore_pc_lo, 8 //pc[31:0]+8 //two back-to-back s_trap are used (first for save and second for restore) - s_addc_u32 s_restore_pc_hi, s_restore_pc_hi, 0x0 //carry bit over - end - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_RESTORE_NORMAL)) - s_add_u32 s_restore_pc_lo, s_restore_pc_lo, 4 //pc[31:0]+4 // save is hack through s_trap but restore is normal - s_addc_u32 s_restore_pc_hi, s_restore_pc_hi, 0x0 //carry bit over - end - - s_mov_b32 m0, s_restore_m0 - s_mov_b32 exec_lo, s_restore_exec_lo - s_mov_b32 exec_hi, s_restore_exec_hi - - s_and_b32 s_restore_m0, SQ_WAVE_TRAPSTS_PRE_SAVECTX_MASK, s_restore_trapsts - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_PRE_SAVECTX_SHIFT, SQ_WAVE_TRAPSTS_PRE_SAVECTX_SIZE), s_restore_m0 - s_and_b32 s_restore_m0, SQ_WAVE_TRAPSTS_POST_SAVECTX_MASK, s_restore_trapsts - s_lshr_b32 s_restore_m0, s_restore_m0, SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT, SQ_WAVE_TRAPSTS_POST_SAVECTX_SIZE), s_restore_m0 - //s_setreg_b32 hwreg(HW_REG_TRAPSTS), s_restore_trapsts //don't overwrite SAVECTX bit as it may be set through external SAVECTX during restore - s_setreg_b32 hwreg(HW_REG_MODE), s_restore_mode - //reuse s_restore_m0 as a temp register - s_and_b32 s_restore_m0, s_restore_pc_hi, S_SAVE_PC_HI_RCNT_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, S_SAVE_PC_HI_RCNT_SHIFT - s_lshl_b32 s_restore_m0, s_restore_m0, SQ_WAVE_IB_STS_RCNT_SHIFT - s_mov_b32 s_restore_tmp, 0x0 //IB_STS is zero - s_or_b32 s_restore_tmp, s_restore_tmp, s_restore_m0 - s_and_b32 s_restore_m0, s_restore_pc_hi, S_SAVE_PC_HI_FIRST_REPLAY_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, S_SAVE_PC_HI_FIRST_REPLAY_SHIFT - s_lshl_b32 s_restore_m0, s_restore_m0, SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT - s_or_b32 s_restore_tmp, s_restore_tmp, s_restore_m0 - s_and_b32 s_restore_m0, s_restore_status, SQ_WAVE_STATUS_INST_ATC_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, SQ_WAVE_STATUS_INST_ATC_SHIFT - s_setreg_b32 hwreg(HW_REG_IB_STS), s_restore_tmp - s_setreg_b32 hwreg(HW_REG_STATUS), s_restore_status - - s_barrier //barrier to ensure the readiness of LDS before access attemps from any other wave in the same TG //FIXME not performance-optimal at this time - - -// s_rfe_b64 s_restore_pc_lo //Return to the main shader program and resume execution - s_rfe_restore_b64 s_restore_pc_lo, s_restore_m0 // s_restore_m0[0] is used to set STATUS.inst_atc - - -/**************************************************************************/ -/* the END */ -/**************************************************************************/ -L_END_PGM: - s_endpgm - -end - - -/**************************************************************************/ -/* the helper functions */ -/**************************************************************************/ - -function write_sgpr_to_mem(s, s_rsrc, s_mem_offset, use_sqc, use_mtbuf) - if (use_sqc) - s_mov_b32 exec_lo, m0 //assuming exec_lo is not needed anymore from this point on - s_mov_b32 m0, s_mem_offset - s_buffer_store_dword s, s_rsrc, m0 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 4 - s_mov_b32 m0, exec_lo - elsif (use_mtbuf) - v_mov_b32 v0, s - tbuffer_store_format_x v0, v0, s_rsrc, s_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 256 - else - v_mov_b32 v0, s - buffer_store_dword v0, v0, s_rsrc, s_mem_offset slc:1 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 256 - end -end - - - -function read_sgpr_from_mem(s, s_rsrc, s_mem_offset, use_sqc) - s_buffer_load_dword s, s_rsrc, s_mem_offset glc:1 - if (use_sqc) - s_add_u32 s_mem_offset, s_mem_offset, 4 - else - s_add_u32 s_mem_offset, s_mem_offset, 256 - end -end - - - - - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_dc_restore.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_dc_restore.sp3 deleted file mode 100644 index 21130cd511..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_dc_restore.sp3 +++ /dev/null @@ -1,21 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(4) - v_mov_b32 v0, s0 - v_mov_b32 v1, s1 - v_mov_b32 v2, s2 - v_mov_b32 v3, s3 - flat_load_dword v4, v[0:1] slc - s_waitcnt vmcnt(0)&lgkmcnt(0) - v_mov_b32 v5, 0 - s_sleep 40000 -LOOP: - v_add_co_u32 v5, vcc, 1, v5 - s_waitcnt vmcnt(0)&lgkmcnt(0) - v_cmp_lt_u32 vcc, v5, v4 - s_cbranch_vccnz LOOP - flat_store_dword v[2,3], v5 - s_waitcnt vmcnt(0)&lgkmcnt(0) -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea.sp3 deleted file mode 100644 index 99147cd517..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea.sp3 +++ /dev/null @@ -1,69 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x80 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x80 - -s_waitcnt 0 -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_02.sp3 deleted file mode 100644 index 0b8e13bdb2..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_02.sp3 +++ /dev/null @@ -1,131 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 - -s_waitcnt 0 - -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_dirty.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_dirty.sp3 deleted file mode 100644 index a3ba2787de..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ea_dirty.sp3 +++ /dev/null @@ -1,61 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -s_mov_b32 s32, 0x4000 -v_mul_i32_i24 v9, v9, s32 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x10000 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 offen:1 -s_waitcnt 0 -s_add_u32 s31, s31, 0x10000 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_02.sp3 deleted file mode 100644 index 55f5ceec97..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_02.sp3 +++ /dev/null @@ -1,79 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//write it to GDS -s_mov_b32 s30, s8 -v_lshlrev_b32 v10, 2, v9 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -STORE_LOOP: -ds_write_b32 v10, v0 gds:1 // GPU hang when GPU access the GDS with GFX queue -s_waitcnt 0 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -v_lshlrev_b32 v10, 2, v3 - -LOAD_LOOP: -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 -v_mov_b32 v12, v11 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_address1.sp3 deleted file mode 100644 index 1df833258a..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_address1.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read data from GDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 1 -s_nop 1 -s_nop 1 -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v11, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_oa_phy.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_oa_phy.sp3 deleted file mode 100644 index 93509f41cf..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_gds_oa_phy.sp3 +++ /dev/null @@ -1,68 +0,0 @@ -shader main - type(CS) - - - user_sgpr_count(4) - tgid_x_en(1) - tgid_y_en(1) - tgid_z_en(1) - - s_getreg_b32 s18, hwreg(HW_REG_HW_ID, 0, 32) - s_bfe_u32 s16, s18, 0x2001e // get meid - s_bfe_u32 s17, s18, 0x20006 // get pipeid - //s_add_u32 s17, s17, s16 - - // get ring id - v_mov_b32 v20, s17 - s_and_b32 s17, s17, 0x7 - - // Get thread_id inside wave - v_mbcnt_lo_u32_b32 v8, 0xffffffff, 0 - v_mbcnt_hi_u32_b32 v9, 0xffffffff, v8 - - s_waitcnt 0 - - // init: gds write address - v_mov_b32 v13, 0 - - // the first 128DW is for ordered-append counter - v_mov_b32 v14, 0x80 - - // offset ring - v_mov_b32 v15, 0x200 - - v_mul_lo_u32 v15, v15, v20 // ring offset - v_mov_b32 v16, 0x40 // wave_size - - v_mul_lo_u32 v18, v1, s1 - v_add_co_u32 v18, vcc, v18, v0 - v_lshrrev_b32 v17,6 ,v18 - s_mov_b32 s9, s12 - s_lshr_b32 s9, s9, 6 - s_and_b32 s9, s9, 0x7ff - s_lshl_b32 s17, s17, 18 - s_or_b32 s9, s9, s17 - s_mov_b32 m0, s9 - - v_mov_b32 v10, 1 - v_mov_b32 v11, 0 - ds_ordered_count v11, v10 gds:1 offset0:0 offset1:1 - s_waitcnt 0 - - v_mov_b32 v18, v11 - - v_mul_lo_u32 v16, v16, v18 // waves offset before. - v_add_co_u32 v13, vcc, v13, v14 - v_add_co_u32 v13, vcc, v13, v15 - v_add_co_u32 v13, vcc, v13, v16 - v_add_co_u32 v13, vcc, v13, v9 - - v_lshlrev_b32 v13,2,v13 - s_mov_b32 m0, 0x4000 - s_nop 0 - ds_write_b32 v13, v0 gds:1 - s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_02.sp3 deleted file mode 100644 index 780e9f9af7..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_02.sp3 +++ /dev/null @@ -1,79 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//store and load s8 times -s_mov_b32 s30, s8 -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -STORE_LOOP: -ds_write_b32 v10, v0 -s_waitcnt 0 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -v_lshlrev_b32 v10, 2, v3 - -LOAD_LOOP: -ds_read_b32 v11, v10 -s_waitcnt 0 -v_mov_b32 v12, v11 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_address1.sp3 deleted file mode 100644 index 09618ba90f..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_lds_address1.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read it from LDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 1 -s_nop 1 -s_nop 1 -ds_read_b32 v0, v10 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read.sp3 deleted file mode 100644 index 4c9f7ec36a..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read.sp3 +++ /dev/null @@ -1,52 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read_tcc_halt.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read_tcc_halt.sp3 deleted file mode 100644 index e13d811bd4..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_mc_read_tcc_halt.sp3 +++ /dev/null @@ -1,77 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -//For vega20, we need to set bit 12 low. This bit will just be set low here in the shader. -//s_mov_b32 s24, 0x15c000 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//store it 10 times -v_mov_b32 v10, v0 -v_mov_b32 v11, v0 -v_mov_b32 v12, v0 -v_mov_b32 v13, v0 -v_mov_b32 v14, v0 -v_mov_b32 v15, v0 -v_mov_b32 v16, v0 -v_mov_b32 v17, v0 -v_mov_b32 v18, v0 -v_mov_b32 v19, v0 - -// read them back -v_mov_b32 v29, v10 -v_mov_b32 v28, v11 -v_mov_b32 v27, v12 -v_mov_b32 v26, v13 -v_mov_b32 v25, v14 -v_mov_b32 v24, v15 -v_mov_b32 v23, v16 -v_mov_b32 v22, v17 -v_mov_b32 v21, v18 -v_mov_b32 v20, v19 - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_no_pollute.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_no_pollute.sp3 deleted file mode 100644 index e1c141b7bd..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_no_pollute.sp3 +++ /dev/null @@ -1,51 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sgpr_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sgpr_02.sp3 deleted file mode 100644 index 76b575d084..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sgpr_02.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//SPI may touch s0...sn before shader is run - -s_mov_b32 s16, s2 - -//write data -s_mov_b32 s30, s0 -s_mov_b32 s31, s1 -s_mov_b32 s32, s2 -s_mov_b32 s33, s3 -s_mov_b32 s34, s4 -s_mov_b32 s35, s5 -s_mov_b32 s36, s6 -s_mov_b32 s37, s7 -s_mov_b32 s38, s8 -s_mov_b32 s39, s9 - -//read back -s_mov_b32 s0, s30 -s_mov_b32 s1, s31 -s_mov_b32 s2, s32 -s_mov_b32 s3, s33 -s_mov_b32 s4, s34 -s_mov_b32 s5, s35 -s_mov_b32 s6, s36 -s_mov_b32 s7, s37 -s_mov_b32 s8, s38 -s_mov_b32 s9, s39 - -s_store_dword s16, s[0:1], 0x0 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sh_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sh_atcl1.sp3 deleted file mode 100644 index 4058f5b7dc..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sh_atcl1.sp3 +++ /dev/null @@ -1,75 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - -s_mov_b32 s30, s8 -s_mov_b32 m0, 0x0 - - -STORE_LOOP: -s_buffer_store_dword s8, s[20:23], m0 glc:1 -s_waitcnt 0 -s_add_u32 m0, m0, 4*1024 // step one 4KB page table address -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -var DEBUG_FUNCTION = 0 -// Remove function check code to half shader run time... -if DEBUG_FUNCTION -s_mov_b32 s8, s30 -s_mov_b32 m0, 0x0 - -LOAD_LOOP: -s_buffer_load_dword s0, s[20:23], m0 glc:1 -s_waitcnt 0 -s_add_u32 m0, m0, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank.sp3 deleted file mode 100644 index fe1b4c2a60..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank.sp3 +++ /dev/null @@ -1,96 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -/* -s_bfe_u32 s33, s8, 0x20004 // extract bank select bits -s_lshl_b32 s33, s33, 6 // ((bank_sel & 0x3) << 6) , bank_sel = address[9:8] ^ address[7:6], if 4 bank enabled -s_and_b32 s8, s8, 0xf -*/ - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - - -s_or_b32 s26, s26, 0x1000 //hack the buffer size to enough - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS -s_mov_b32 m0, 0x0 // BANKA -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0x40 // BANKB -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - -/* -s_mov_b32 m0, 0x80 // BANKC -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0xC0 // BANKD -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 -*/ - -end - -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank_tag.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank_tag.sp3 deleted file mode 100644 index f7df170170..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_data_bank_tag.sp3 +++ /dev/null @@ -1,96 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -/* -s_bfe_u32 s33, s8, 0x20004 // extract bank select bits -s_lshl_b32 s33, s33, 6 // ((bank_sel & 0x3) << 6) , bank_sel = address[9:8] ^ address[7:6], if 4 bank enabled -s_and_b32 s8, s8, 0xf -*/ - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - - -s_or_b32 s26, s26, 0x1000 //hack the buffer size to enough - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS -s_mov_b32 m0, 0x0 // BANKA -s_buffer_store_dword s8, s[24:27], m0 glc:0 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - - -s_mov_b32 m0, 0x40 // BANKB -s_buffer_store_dword s8, s[24:27], m0 glc:0 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - -/* -s_mov_b32 m0, 0x80 // BANKC -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0xC0 // BANKD -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 -*/ - -end - -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_dirty_bit.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_dirty_bit.sp3 deleted file mode 100644 index dd766baed3..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_dirty_bit.sp3 +++ /dev/null @@ -1,112 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -s_or_b32 s27, s27, 0x8000000 // changing mtype to non volatile -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -s_mov_b32 s9, 0xaa -s_mov_b32 s10, 0xbb -s_mov_b32 s11, 0xcc - -// BUFFER STORE OFFSETS FOR BANK A AND BANKB -s_mov_b32 s12, 0x0 -s_mov_b32 s13, 0x10 -s_mov_b32 s14, 0x40 -s_mov_b32 s15, 0x50 - - -// The following sequence is needed to inject error in dirty bit ram. Sequence was provided by SQC designer 4/1/2015 -//1. you have an invalid line in data cache, -//2. you write to some of the dwords in that line (the remaining dwords are still invalid), -//3. then there is a read request that hit on that line, but it needs the dwords that are not yet there in that line -//(in other words, it needs some of the invalid dwords of that line), -//4. the request will go to TC, -//5. when TC return comes back, the dirty bit rm will be read - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS - -s_mov_b32 m0, s13 // BANKA write one dword to tc -s_buffer_store_dwordx2 s[8:9], s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, s12 // BANKA. write one dword to sqc -s_buffer_store_dwordx2 s[10:11], s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s13 // BANK A read the dword that is not in cache -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s15 // BANKB write one dword to tc -s_buffer_store_dwordx2 s[8:9], s[24:27], m0 glc:1 -s_waitcnt 0 - -s_mov_b32 m0, s14 // BANKB write one dword to sqc -s_buffer_store_dwordx2 s[10:11], s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s15 // BANK B read the dword that is not in cache -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 -end - -s_add_u32 s12, s12,0x80 -s_add_u32 s13, s13,0x80 -s_add_u32 s14, s14,0x80 -s_add_u32 s15, s15,0x80 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_atcl1.sp3 deleted file mode 100644 index 3d3186d362..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_atcl1.sp3 +++ /dev/null @@ -1,63 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - -label inst_page[34+1] // 34 4k pages - -for var i =0; i < 34; i++ -inst_page[i]: - //each block are 4k side... - s_cbranch_execnz inst_page[i+1] //1 dword - for var j = 0; j < (4*1024)/4 -1; j++ - v_mov_b32 v0, 0 // each with 1 dword - end - -end -inst_page[34]: - - - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank.sp3 deleted file mode 100644 index 64e1084623..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank.sp3 +++ /dev/null @@ -1,69 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -// don't care about the loop count, fix 8 loops -// Totaly number of cacheline equals 2(A,B,)*8 - -var num_cache_lines = 16 -label BLOCK_64B[num_cache_lines] - - -for var loop = 0; loop < num_cache_lines - 1; loop++ -BLOCK_64B[loop]: - s_branch BLOCK_64B[loop+1] // 1DW - for var i = 0; i < 15; i++ - v_nop - end - -end - -// last block -for var i = 0; i < 15; i++ - v_nop -end -//For uei 2 msb and lsb flipped -// s_nop will become v_nop and it will a legal instruction -BLOCK_64B[num_cache_lines-1]: - for var i = 0; i < 81; i++ - s_nop 0x1 - end -s_endpgm -end - -/** comment, four bank interleave -Addr 0x90000000 => Bank A -Addr 0x90000040 => Bank B -Addr 0x90000080 => Bank C -Addr 0x900000c0 => Bank D -Addr 0x90000100 => Bank B -Addr 0x90000140 => Bank A -Addr 0x90000180 => Bank D -Addr 0x900001c0 => Bank C -Addr 0x90000200 => Bank C -Addr 0x90000240 => Bank D -Addr 0x90000280 => Bank A -Addr 0x900002c0 => Bank B -Addr 0x90000300 => Bank D -Addr 0x90000340 => Bank C -Addr 0x90000380 => Bank B - -**/ diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank_snop.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank_snop.sp3 deleted file mode 100644 index ba62535613..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_sqc_inst_bank_snop.sp3 +++ /dev/null @@ -1,29 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - - for var i = 0; i < 1000; i++ - s_nop 0x1 - end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ta_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ta_address1.sp3 deleted file mode 100644 index 04e7a3a285..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_ta_address1.sp3 +++ /dev/null @@ -1,51 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read from memory -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02.sp3 deleted file mode 100644 index 46b8b9b0a0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02.sp3 +++ /dev/null @@ -1,73 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -s_mov_b32 s16, 0xa5a50001 -s_store_dword s16, s[0:1], 0x40 glc - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02_ea.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02_ea.sp3 deleted file mode 100644 index a374f8454d..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_02_ea.sp3 +++ /dev/null @@ -1,71 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//For vega20, we need to set bit 12 low to steer traffic to ea0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_02.sp3 deleted file mode 100644 index 70439d9d5c..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_02.sp3 +++ /dev/null @@ -1,345 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x6000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -LOAD_LOOP: - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_03.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_03.sp3 deleted file mode 100644 index bd4c14ba21..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_03.sp3 +++ /dev/null @@ -1,509 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x9000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x9000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -s_mov_b32 s20, 0x1 - -LOAD_LOOP: - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_04.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_04.sp3 deleted file mode 100644 index c93b2992f0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tc_atomic_04.sp3 +++ /dev/null @@ -1,2816 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x9000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x9000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -s_mov_b32 s20, 0x1 - -LOAD_LOOP: - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcc_return_control.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcc_return_control.sp3 deleted file mode 100644 index 99be574f61..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcc_return_control.sp3 +++ /dev/null @@ -1,1019 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x6000 - -//store and load s8 times -s_mov_b32 s30, s8 - -//waves with the least 2 tgid (i.e. tgid0 and tgid1) will do atomic operations -//while the rest of waves will do load operations -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -LOAD_LOOP: - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_atcl1.sp3 deleted file mode 100644 index 93d27c8d80..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_atcl1.sp3 +++ /dev/null @@ -1,80 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - - -//store and load s8 times -s_mov_b32 s8, 33 // store 33 times to overflow atcl1 cache... -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -v_add_co_u32 v0, vcc[0:1], v0, 2 -buffer_store_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -s_add_u32 s31, s31, 4*1024 // step one 4KB page size -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - - - -var DEBUG_FUNCTION = 0 -//remove code to half shader run time -if DEBUG_FUNCTION -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_utcl1_fifo1.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_utcl1_fifo1.sp3 deleted file mode 100644 index ac9744f68c..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_tcp_utcl1_fifo1.sp3 +++ /dev/null @@ -1,80 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - - -//store and load s8 times -s_mov_b32 s8, 33 // store 33 times to overflow atcl1 cache... -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -v_add_co_u32 v0, vcc[0:1], v0, 2 -buffer_store_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -s_add_u32 s31, s31, 4*1024 // step one 4KB page size -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - - - -var DEBUG_FUNCTION = 1 -//remove code to half shader run time -if DEBUG_FUNCTION -s_mov_b32 s8, 0x20 -s_mov_b32 s31, 0xffc - -LOAD_LOOP: -buffer_load_dwordx2 v[0:1], v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_02.sp3 deleted file mode 100644 index 9c66b37275..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_02.sp3 +++ /dev/null @@ -1,72 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 -//bump up the addresses being accessed to generate multiple reads to the pde memories -v_mul_u32_u24 v9, 65536, v9 -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -//Hack number of records to avoid range checking which we don't want since we want to generate -//out of range accesses. we are really trying to generate many reads to the PDEs to get FUE. -s_mov_b32 s26, 0xffffffff - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_03.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_03.sp3 deleted file mode 100644 index d4d53d09a0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_utc_vmwalker_pde_03.sp3 +++ /dev/null @@ -1,72 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 -//bump up the addresses being accessed to generate multiple reads to the pde memories -v_mul_u32_u24 v9, 4096, v9 -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -//Hack number of records to avoid range checking which we don't want since we want to generate -//out of range accesses. we are really trying to generate many reads to the PDEs to get FUE. -s_mov_b32 s26, 0xffffffff - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr.sp3 deleted file mode 100644 index 138e13eded..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr.sp3 +++ /dev/null @@ -1,47 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_01.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_01.sp3 deleted file mode 100644 index 6d3ed3f9db..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_01.sp3 +++ /dev/null @@ -1,54 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_02.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_02.sp3 deleted file mode 100644 index 3228e2377d..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_02.sp3 +++ /dev/null @@ -1,54 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -s_mov_b32 s16, s2 - -//SPI may touch v0,v1,v2 before shader is run - -//store it 10 times -v_mov_b32 v10, v1 -v_mov_b32 v11, v2 -v_mov_b32 v12, v1 -v_mov_b32 v13, v2 -v_mov_b32 v14, v1 -v_mov_b32 v15, v2 -v_mov_b32 v16, v1 -v_mov_b32 v17, v2 -v_mov_b32 v18, v1 -v_mov_b32 v19, v0 - -// read them back -v_mov_b32 v29, v10 -v_mov_b32 v28, v11 -v_mov_b32 v27, v12 -v_mov_b32 v26, v13 -v_mov_b32 v25, v14 -v_mov_b32 v24, v15 -v_mov_b32 v23, v16 -v_mov_b32 v22, v17 -v_mov_b32 v21, v18 -v_mov_b32 v20, v19 - -s_store_dword s16, s[0:1], 0x0 glc - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_clear.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_clear.sp3 deleted file mode 100644 index 190e1cfc24..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_edc_vgpr_clear.sp3 +++ /dev/null @@ -1,75 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(2) // 2 for the buffer resource + 5 for thread/thread group parameters - //s[0:1] the mmeory address for the buffer resource - - tgid_x_en(1) //s_tgid_x s2 - tgid_y_en(1) //s_tgid_y s3 - tgid_z_en(1) //s_tgid_z s4 - - //vo for tid_x - //v1 for tid_y - //v2 for tid_z - - for var vgpr = 0; vgpr < 256; ++vgpr - v_accvgpr_read v[vgpr], acc[vgpr] - end - - for var vgpr = 0; vgpr < 256; ++vgpr - v_accvgpr_write acc[vgpr], v[vgpr] - end - - s_movk_i32 m0, 0x0000 - s_mov_b32 s10, 0x000000f8 - s_set_gpr_idx_on s10, 0x8 -label_0004: - v_mov_b32 v0, 0 - v_mov_b32 v1, 0 - v_mov_b32 v2, 0 - v_mov_b32 v3, 0 - v_mov_b32 v4, 0 - v_mov_b32 v5, 0 - v_mov_b32 v6, 0 - v_mov_b32 v7, 0 - s_sub_u32 s10, s10, 8 - s_set_gpr_idx_idx s10 - s_cbranch_scc0 label_0004 - s_set_gpr_idx_off - v_mbcnt_lo_u32_b32 v1, exec_hi, 0 - v_mbcnt_hi_u32_b32 v1, exec_lo, v1 - v_mul_u32_u24 v1, 8, v1 - s_getreg_b32 s11, hwreg(HW_REG_HW_ID, 4, 2) - s_mulk_i32 s11, 0x4000 - v_add_co_u32 v1, vcc, v1, s11 - s_mov_b32 s10, 7 - s_mov_b32 m0, -1 -label_001B: - ds_write2_b64 v1, v[2:3], v[2:3] offset1:64 - ds_write2_b64 v1, v[4:5], v[4:5] offset0:128 offset1:192 - v_add_co_u32 v1, vcc, 0x00000800, v1 - s_sub_u32 s10, s10, 1 - s_cbranch_scc0 label_001B - - s_getreg_b32 s20, hwreg(HW_REG_HW_ID, 0, 32) - // s12 = SIMD - s_lshr_b32 s12,s20,4 - s_and_b32 s12, s12, 0x3 - // s13 = CU - s_lshr_b32 s13,s20,8 - s_and_b32 s13, s13, 0xf - // s14 = SE - s_lshr_b32 s14,s20,13 - s_and_b32 s14, s14, 0x7 - // s15 = SE * 16 * 4 + CU * 4 + SIMD - s_mul_i32 s16, s14, 64 - s_mul_i32 s17, s13, 4 - s_add_i32 s15, s16, s17 - s_add_i32 s15, s15, s12 - s_mul_i32 s16, s15, 4 - - s_store_dword s15, s[0:1], s16 glc - s_waitcnt 0 - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_wf_lifetime_cs_pm4_01_cs.sp3 b/ras_prebuild/sp3/gfx9/edc/arcturus/gc_wf_lifetime_cs_pm4_01_cs.sp3 deleted file mode 100644 index 9069afdb3e..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/arcturus/gc_wf_lifetime_cs_pm4_01_cs.sp3 +++ /dev/null @@ -1,58 +0,0 @@ -//s[0:1]: buffer resource -//s2: num_threads_x_full -//s3: num_threads_x_full * num_threads_y_full -//s4: num_threads_x_full * num_threads_y_full * num_threads_z_full -//s5: COMPUTE_DIM_X -//s6: COMPUTE_DIM_X * COMPUTE_DIM_Y -//s7: loop_lifetime -//s8: dispatch_offset -//s[9:11]: thread group ID -//v[0:2]: thread ID - -shader main - -type(CS) -user_sgpr_count(9) -tgid_x_en(1) -tgid_y_en(1) -tgid_z_en(1) - -//sp3 loop for lifetime -s_mov_b32 s12, 0 //init loop idx s12 -label_0004: -s_cmp_lt_i32 s12, s7 //scc = (s12 < s7) ? 1 : 0 -s_cbranch_scc0 label_0006 //if(scc == 0) then jump to label_0006; else nop - -v_mov_b32 v4,s12 -s_add_i32 s12, s12, 1 //add loop incr -s_branch label_0004 - -label_0006: //end of SP3 loop - -//v3 thread_id_in_group = (tid_z * num_threads_x_full * num_threads_y_full) + (tid_y * num_threads_x_full) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 //v3 = tid_y * num_threads_x_full + tid_x -v_mad_u32_u24 v3, v2, s3, v3 //v3 = tid_z * num_threads_x_ful * num_threads_y_full + v3 - -//s28 thread_group_id = (tgid_z * COMPUTE_DIM_X * COMPUTE_DIM_Y) + (tgid_y * COMPUTE_DIM_X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 //tgid_y * COMPUTE_DIM_X -s_add_i32 s28, s28, s_tgid_x //tgid_y * COMPUTE_DIM_X + tgid_x -s_mul_i32 s29, s6, s_tgid_z //tgid_z * COMPUTE_DIM_X * COMPUTE_DIM_Y -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id * (num_threads_x_full * num_threads_y_full * num_threads_z_full) + thread_id_in_group -v_mov_b32 v9, s28 //thread_group_id -v_mad_u32_u24 v9, v9, s4, v3 - -//fetch the buffer resource -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//write absolute thread id using it as an index -buffer_store_dword v9, v9, s24, s8 idxen:1 -s_waitcnt 0 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_clear_vgpr_lds_arcturus.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_clear_vgpr_lds_arcturus.bin deleted file mode 100644 index d0ea4951e133ee28f93b72374fadf8dc3fd150d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2232 zcmXZed6d>u90%b0{=721rajtdlbzH^Wy>HTThq|KV82t^TtYTV;I_nyyv&gYzazW3jo4k6^Xk4Ic}*f3fgdn3JF5=-IQ71D?8(!3I?v#lJd3?}HqYU?Jdfw|0`_Jf_T`1Vh!?XTFX5%UjQu%)mvbNo z@d^&+mAr~Wcr~x#wY-i)IgGt5e4a1x zMZUzB`3hg2#<`l7f&I-z_f7R{uY*IQJjLF*76p diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_compute.bin deleted file mode 100644 index 46bb0ebc23b1e2d36f5ee28a6477aa011fa4833a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2396 zcmX}ud2o|O9LDi|-@I*;@Fq>#fM8Q>UZAgP8 zri5}R^#E_Y>e(uqH?@KX1#MAm~iy=gR1y!`6hFO@6IcP@*IV<8U2qp%2z@n{@`gK-EB#ba<79*f7}@i-huUy zgcsu_cqv|nm*W+9C0>QI@M^5UYw%jU4rk*WydH1B8*wh)gg4_nyajK?+wgY01MkGU z@NT>Z@5TG@etZDuV=W#8*fG^@p_%gnNjrc0QhOgrr z_$I!EP1uZY<2$$x-^KSZi58}?1>eV3`~cVE2K*2|!jJJ2+=y+s2{+@X_!+ii2X4X7 z@eACFUt%YA;a9i~x8n}niC^P4xC?jVxA+}?k3Zm#_!I8Iy|@qe8DmH~bwB z;vwwDKkzW7@lX5SY-dXT4rGg3!s$#E zF}I1*0G*)nz+r;IM+4(gGpp_dxT?o7xMqQO!`w4+KWvd21tswyI?>d_prW)X-rDRT$3 zD+NN-%K9y$Hz@)Qor>IJq@*lqcZ|c@rLQu9>ULggl8hTSdylo6EG~|K~!O*1r??UTOdU diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq.bin deleted file mode 100644 index 3400e4dd29474c2bcd6a312e0073777e6bce899e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP1CnIpIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BCnS)`7Up8qF#rGn diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq_gds_read.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_cp_sq_gds_read.bin deleted file mode 100644 index 1efe1c042e7e2ae8c8c2c93d8d9c175d20a3697e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmXxcF$w}P5QX7Co9t?`u~{uFCY`l6^9qZxwvauLS?~mQ9!7`>n1PuO-h(lKKbKQx z_jf941^ePdL#XB8)(YH{=Ji%RrrK@1vAry^l{mPt1d%A+G~3cy>&K5alT}L|sW{lFaXpAX$j$$Q_Rk0v?wzdPU zfy(wbY0K|T!*3D)7{AmL{8ptq$6c`}I<~OepNll#9nMQJ&8Y|N0i{^<8u+0+94cv@ zsRBBY!1FKXEDItKA;rDMLqO<;k9XLS(8`lu(7+$%>9wT(nqF&znl<$`PSgia!b`pp zWw9l~b+O(~aZUI`T*s-B7%1RHl)jr;pl|ErO!cY8+yj1^u6C2L?wpSX`q@}xc8N56M<%)3qN6E)oNFyaw8j#bh$+%0tnjbE4Y%&s z<)mIrdca;ZyO?UVsE>>mAR{bEMH@ZV8EcT9>Fb1aS`+BtL1Qs zmvVTX!>#6UR(#sc>-}j?>_!eZ_H3&{p0%5mTT*=_-}BUSJm4YMJn z9T}*4VsK1FC``2$DR7q}> zYw9dxn)42*#$BmQjgdBoRFj?@T$|2W&R{o#_is+e4>EW;)0dmU%U7rK-3%UN<1_kh z2Agjj`)hmXFGg$O(w(wNcZzmcpo?_eAF!U8Bi5R|WZ|dxtY^imbe|Fj9I-tXvK`iu nw0E5GcFLF8F7YAj7_OGYO0c&qEXBN6h-*D_msOa21NhND&Hz#4 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_dc_restore.bin deleted file mode 100644 index c5b11be40eada2dd55d32fb439b2317ae118ab6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmZQ!U|`_U0}?>M3#EmCv?Gu&45T@Lv>-^5iJ^{>iK&i>iKUL2iLH)-A?OYRLp@6Y sL(l#OCayY%Ieq&Zxwwo#d{)j$wSWG%?`L2rxWmL+&j1o*U})SA0J&Hdvj6}9 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea.bin deleted file mode 100644 index 578dc7429cdfca512ff07d042342cb2a2fb01659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU2;1CnIpIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<_n%?@z6Ow1g@Om13~ci9|K%GP ofaas~IT|~F$~d-s{ok@*j-dmg4`?TYLI9dxR6ep^28PD{0KlIw@Bjb+ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_02.bin deleted file mode 100644 index d0f2aff8e0ae49efb1f24b425c5fe65d75e740fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU3Z1(IarIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;AA>@{15O4udHELkh7rLA Rh7*HA0Fs|a0Gpw4KLFN$gI53m diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ea_dirty.bin deleted file mode 100644 index 5372f1724351196906a104f7b2e1c4c583b6e0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmXYq!3hE}6hvpU*_gjZkoB4+U;);k*pL;70S_KLND5Fd+kxj~!3wqm%kUO|z&ZQ} zGoKj=z-;)i7Jqh3Q2{GvsDX6}RXY{{*Hq&@RSjgJm>JnNHdwM=&HK<>>#gXH#2Jy1 x8PA9BX|L?Kv-fyVPQCcR@}gPA@Kxsmfk`O zlXcf%<4^v7#mt`}0K%m{dWJnCO~(R8nw0~rjOek}05~=dZk^?V7}|r7Fqc=Ha^VF@ zm2fV&9c5H&l!he7MPj#oP*FkoC{7jLQYpYf-uxDr+*#kju;|#_f-lM(@UJg* jXr?G-;l(MiH@?8+1DHIi(EH) diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_address1.bin deleted file mode 100644 index ae19466d3f43b5231cfcc039cde9f47f6b0833dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP4U%NzIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG_i@O{Ac*H@Be=W21bU4{V>eHkb8rR Wfq@%j9z#OG15R!>b}*ZvaX$bE0vyi( diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_gds_oa_phy.bin deleted file mode 100644 index efc7391e009a59178c1fcf4a0d1eb06dfefb010f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmXXKF;H zH)ST)dFi^0&P&hn936aCor&Ne181lMcAFqc^JFw=W4%|o`c_`${sGX1{!&^k6|Vb* zJh@Ds9fJAg5oq1}TeZYR?1n|@fEc;+zUb7Up(at`m3Ibc!V0PzVm A=l}o! diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_02.bin deleted file mode 100644 index c6efa4715ce4d3be744c5a9f16135f27ffe96e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmZ9FKMKMy6vn?cX>8KER0ok%5yVmO27(vx2p+&QlvW%%I7knmQ*Yp$7Cb>WM{l8n z5R+0DAH4S)zCVuw2$$xV>356_i31D_3j(aH$V6=coGOBQ<9MK!ZZD+5lZE6mV?kWR zQfAVP5^glkLz?2Mu-iU4*wkiyT-1RL=NccSHQ*qvehZ8rqWdARXvEBcpXDjw-`@II gO^~-)U~hea?F+~#`S-qzSL3XJvIO1K>$WqizJ)Y5YybcN diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_lds_address1.bin deleted file mode 100644 index 2da7b4980666ff8d5a643f018ba4d7dfadf108c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP4U%NzIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG_i@O{Ac*H@Be=W21bU4{V>eHkaL3z UY92#E!2?bPHg=HN3=EC?0S1U1xBvhE diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read.bin deleted file mode 100644 index 78335009bd61f30f27d1f58842910ef089b3a384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read_tcc_halt.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_mc_read_tcc_halt.bin deleted file mode 100644 index 126518f5c7672178c8733af2bc6e3cfb648b75b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmXZUUkZXi5XbSK&Z@0xe>5Uut%!(_kcf!r6dl1Mbb=w@dk8PkO)}^N-Jqj18!deH z`!LKX08t^Iy!hWl8aO~Iy%CVxp&veNfNMi|y&VtA)(s-1JyV;Osr)djGh-^_Cah(q zb)+u1KTw`N8vfMof(8s4ijf!#BPL=d=3*h19MX~7bl`~g9Mg_FwB;^sxJL!|Y0U}c QoYIO>p6%`6cNM3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sgpr_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sgpr_02.bin deleted file mode 100644 index f7e785224b574ac135621f75aa4ead456534ceec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmXZVw+#YO00hxFgOebEga~gkYCxhfj>Be%0`R7bfztR$Y_KobU{jzv2^CWNTMten zXao-lG{Y9N7mh}pj5(WdG39E3n?>%Hcv$9Xg_kYnw#n?UuuE=_rF~WoSUY6nh^=FG LlFmNAU&!8H_R}F` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sh_atcl1.bin deleted file mode 100644 index 9a7f85d0f91000d4e982e711f728efc9d2a86898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU1T3zB5xIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|+9~V>N fff}eeHUDcG7=VUyGM3#EmCG!r8OgD{Yu#LU2;29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;pVWV;b_M|kh6aW|`*@fV m57a=-;^9z)vk%~r<7n(?U|`_b^8SCzeg=k?17Ph8jr#%mTPe%{ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_data_bank_tag.bin deleted file mode 100644 index 73f31aa18897c8c2aa015beed099cb8ec81ca71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU2;29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;pVWV;b_M|kh6aW|`*@fV m4%9%+;^9z$vk%~r<7n(?U|`_b^8SCzeg=k?17Ph8jr#%lgDJ=W diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_dirty_bit.bin deleted file mode 100644 index b36e1036d69e890a2247fe520f25c9887f45f6e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmZ9GO^O0B5QU#HYFg9X;4F>c2|R<~!mWpJZZQnqAUHF&KlA}~<;L~w2C4&Y-FSex z$v~zOq!F{IuU@^ER3rdB=E5hwv(FR_;DuQ>ftfekUF!i9)xZr_+^8llw?+%nQ*^ZK zwoGXvlec@ra%fC$ME^ZvFN(BOI8cToIegNYFFSnEPvDxa%nSwXu_22sXLdB_S&To@ z;?=%!@Aqofg;>-&_-a(^^eLY_<%9o_*G^{{zZ|>e4`!f3U5-f8DYImX@RZ Q?>zyh6XeuR`~Z3N4;QpmU;qFB diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_atcl1.bin deleted file mode 100644 index 8ccfde0863c686a41752324ca6508aa3a1ef0b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139380 zcmeI#O-h1s90cIMUxj86we0N*tvj9Ms)ANt$eBKarsK4{J#6RCw%h&s{`>xA{@K&_>h1iz90yPT0Rs#$zyJdbFu(u<3^2d|1HA_9 z|K4uht!^1$fB^;=V1NMz7+`<_24cYeXCW3O3k)#800Rs#zyJdbFu*{s0sFtVTX(Bl z1{h#~0R|XgfB^;=V1R)bu>VXrcp7+`<_ z1{h#~0R|XgAO`Gz7GgoNzyJdbFu(u<3^2d|0}S*Uu>X6zb+@`@fB^;=V1NMz7+`<_ z1{jC|`=5nakSs9300Rs#zyJdbFu(uSH3^2d|0}L?000Rs#z(B77`@gqacdJ_l7+`<_1{h#~0R|XgfPomW|5=Cy$pQlm zFu(u<3^2d|0}L?GYry{R?bhAumH`GBV1NMz7+`<_1{h!<2JC+pVnMRN00Rs#zyJdb zFu(u<4D=eX|9iW2x4LD30R|XgfB^;=V1NMz7>EJ;pM_YEEHJb7_k3Yhy}?4 z0}L?000Rs#zyJdbFwkqj{_pM9-RhPB1{h#~0R|XgfB^;=U?2wUe->gvvcLcX3^2d| z0}L?000Rv48nFL+yLGp^Wq<(&7+`<_1{h#~0R|X|0sEhYSdc6*zyJdbFu(u<3^2d| i1HA_9|K4uht!^1$fB^;=V1NMz7+`<_24Y~0M3#Emiv@npK#LU1D$jHFJ&(O3VsHBcuJgR>*{K!o^Able}{m4<6 V|0oH2Muvv{qnNTVU|?w64*)MT@<9Lq diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_sqc_inst_bank_snop.bin deleted file mode 100644 index 46b24b590998a24d19309feed263c89a5e8a01be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4044 zcmeIwF%bYD3`5ayFv0>p&>3Wiu5jMa8 Y1~7mD3}65Q7{CAqFn|FJ{52qLdx3=I_y7O^ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ta_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_ta_address1.bin deleted file mode 100644 index 78335009bd61f30f27d1f58842910ef089b3a384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02.bin deleted file mode 100644 index 82c857dd7d63be1025aa3bfbd420c06f3a82fa8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;1(f^GFkv4f!_uV;EY1fUK#JM84uB{I zhMxV*42Lf=vNEuMXeM?Z7A{tqNiv)=jcnYqlVoLN8fBP->NtUNoSZx?91QdJH89NI z$DmN~fRlku9;9EsMZSTfv7>>3fn&?h|1JCF7&@S80^n*Gm?i3v)%^gf1G$L-*-Z?M F`vJzGG6?_x diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02_ea.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_02_ea.bin deleted file mode 100644 index 602c0c115f2af09d460a239acc368265d59a3fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;3X){wIsl>=7<%^qXIQZB|NH;{B@`su zm>CXVWMpMv0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|@%Y`4;&Gj>e7#1_q8TKmWJvmt*LFstJIrVPKZ1Lss_#sE&c5aX$d7w=ZS@ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_02.bin deleted file mode 100644 index 8a69de8835e71b9cbdc19519a3ae59cbfa0c36c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmeH}O-chX7>3_TreiaXbf_+7kv0)rxbh4h!2>9G5D^1fe{eMis0Hx={;X#NPtY6G z6L^I9POTt0Ko^oM=H>Yk$nfPMBn40$@WZjS${{mPfNf?ifq~#;mcMsvfcw^C*7z^) zD_c#JGm`}7S>kG0M+vZgE%7l=dPutz8%3J;bgh+k+2*JoY3;Nao-58NRd7uz5{KIDGD zMZjgiI{{Y#>ws;*djanU9RKg<{`ftgf7HLRn_d9pw-bNa3f#Utc1|AMeDXfE)>{Wl SCnLvxtkH+RPIhkvz_s7u!}0I{ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_03.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_03.bin deleted file mode 100644 index 1318fcb6ffe2e53fca83f5165bc048f29dd32310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3336 zcmeI#J&w~*7=_^z$H~~4i?9Y4F7A+v)mLgxHmd+@oeIEKK1SN^n7>jee0vM zXQ_Rcrq0fp-i;rPl$xp8>D^viyHxh{yRFUV-Mm#Z91qXqANN78t<%;;-M3EO96Ool zdLJqMcrm&>w0gVOWOi%KRIgS4Xut(7afJ=8af4fwy?e(z47k80uCT#1Zg7i=$isjO zT;d8FT;m3}sD2*w_lp4+xWpAUxW)}`QSqO=7!!1uVU7iQ3|L}?HEKdWCg?E391HXq zu*3>$)RcTo&|!u-7U(fxi51qU6Y?=ZhZ*KrpvQnER#>AF@-ab&8Rl4^$ABePSfdU0 zV_#xS&|!u-7U(fxi51qU8Tpu?!whpQ&||<7E38qcD7lPHn+5T`NMv5L+C=QVAmdwhvzZ$VR#?@lX>uW OCVsY=*#DoA+QV diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_04.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tc_atomic_04.bin deleted file mode 100644 index ce1ac3d93ade7b9cb1baba678f5b5e6ff9acc862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20600 zcmeI)PmUW!6vy#5wr5i96rz|EP(URvq+ax*h586BA+hcw^bz_12(_h5_#+mr5$ljm z4gkrPaRevG4d4W<$SyKv*Ox1xES?whQMawI=x2Z$HP&c-5viv9zzOGs{QWCh3tM=%gy<`IFWq*+qL}h`r=YHCs+6E zW_uZLV-@#T_aELqjBy`V*WXn6xvH}HHCM0KpI=Cot+Ge?`A(MnR_^OR^SRybxZBI9 z$J&qoc|6Duc}(ZADDUSn`RqIgKSQpYG&x`+FXlaxxG7vk5!waljEL zoN+k6hnP9Xwjj^fDsec*kFr!Vn2_U4H~rQ&||=e32SVyMcGmx4O(>QF<``mH8$9y z+^0SowCK=dz=#QJY_LVK)JKCB9eNBHF=34jws^WHpRZR;*kO+YjyU0r3(5!7!-O67 zIN*pA&bXjlQx6k%*yDgBPB`O&@_>4nu)`h)9C5-K7nD=}$@BXL4O(<~&Pn-of#Zk? zYizJZ`H=c((4s?+0V5`?vB4JQBkH3;iw->ojF_;-23wSmsgDLNI`kMYV!|35Y*7OB z(V#_#9s@>9SYv}N$|uxEgBBfn3>YzCjSaRapHd$UT6E|!V8nzqHrS$kMtwAB(V@qH z5fj$fV2cu|j|MF|^cXN=!WtWFF;_416DI7i#{oy2aK;6N+~Y7|hdmBB;)F9UDC8c8 z2|Mg@z!4{$aX}&XI84}Kj{}Z4;fxDve#-y&Jnw3LDt*xWRQjO#sq{hfQ|W`|r_u+_ zPo)o+Q`!hVTB$pXp2KnD&zL-=N3Z4;>GBJ?MO(^P%1k^nR#$K=Xj+0nG!N z2Q&|89?(3Xc|h}k<^jzEng=uwXdci!pm{*^faU?s1DXdk4`?3HJfL|%^MK|7%>$YT mG!JMVc<1xLf1e3_`_JP;`M$sVbO)#1OXB&&d?)p02UksAuQ4I5vv@a^a^~|2@)sh0g%cG zxB!xQDMiBGv4GWNk*BdOIU0}Oo2SG8(nER4v$>9aiQNF$l2}GSuPu{F_qkaE+}0NJ z%D!7WC7vl(9UwxgjPW|E>qzh^9r0=!quhD@}GVt3s&9{b*7nJ6=Zd zTA$M3#EmCG!r8OgD{Yu#LU2;0Fq?mIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|xl19k diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_utcl1_fifo1.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_tcp_utcl1_fifo1.bin deleted file mode 100644 index b1dddf5fe4f5a187459547f5ed9f76358a6256d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;1CnIpIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|i_TqO-KlX Tt7Tx8s6$u(9jKmxp>aO|q%7#N%w9rO~;pz#FWz+>oytue+w{5SlU zFM(|1%4PPYb`$|D96JGPKgQ|B1NMX9b`K(?XE@1Z8kx>0W8-Pw<;GYO>PopysZ5Sq w&mkb;*w>u;D~FzP_fW)z|0o(7Hld)PqO{OUShE^W;0-*6R`}N#;}r9X zc^L^H-*RylUmB)}fF*Mfz$T0;y95Be7r5P{1Trw5*TAoPPt03oD}l diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr.bin deleted file mode 100644 index 3be99fde9abe814627cdbae111ba518ed9e85000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuzzn28l5AWDKokQ*&wgfx!xtG@8CXCx6FUzJ yC#%dP84j67HZIvovNAG_GE72soIp8FP9By9hWYy#5&|A@GO)>m^fE9s?gs$ja}u=x diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_01.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_01.bin deleted file mode 100644 index 0d98d2a2a889a3825d780bb38ca3fa3bc10f20ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU1T0g`0nIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;AA>@{15O4ud60hj7WoE_ U#*PLC297O1|F`UCU})SA0H@{}%>V!Z diff --git a/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/arcturus/gc_edc_vgpr_02.bin deleted file mode 100644 index e54d2c852e631b57a3ad05c0b0b9d19e2e80b8da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmXZU%?g455Cq`W@nrs#N=S%^NQi_)h)7r8Yrs?2=z+9Ha}Lg7zTL}sW)}1+B|J>z zM}I1RFw1qj_FWxhbaADFT;60MOIgWUHZ41^;fNumLZ~WOKsrc35Tpb9va##+_V|lEA6|f>!#2fGiyb*82oA4&Agq5%| zR>qt0X1oP&!CUcGybW)|Dp&=pVpY5yZ^vp_4Xa~ytbsMKCf3ASSPN@oZLEWJurAic zdRPzdz&o%$*2g4F!Uos?8)8Ge6Ys=E*a#bAW4sIR!Y0@Rn_^SE8}G(u*bJLvb8LYv zuqC#{WK70Z*b48#d+=Vo7w^OS@P51>AHWCjL3|J&!iTUmw#GKt2HRp=Y=`ZzJ+{Y( z@nP(M9k3&I#7@`=J7Z^j1RudJ*aaWON3kn*#ctRQyJL5J3?IYC@p0^dJ+LSC#9r77 zpTH-uH}=LS@kx9NpTei{X?zBs!9Lgr`(j`0hyAcW_QwG@00-hg9E5}LS$r0s!{_jM zd>#kmU>t%&a3~JNVK@wj<8XWdU%(gfMI3=6a3qezQ8)@;!k2I~j>a)K24BXPaV(C- zSMU`~!4w>a<1iIdF%8pjJdVc+I04f!9bd&)F#|JjB2L6i%*5C5HO#^+oP?8bGET-R zI0awF*D)Kj@eOa5_%M88`!H;!K={vv4-f#yL0#=i*$P zhx2eg&d0a$ZF~pc!3DSg7ve%(go|)7F2;B9U3?GU!}sxh`~W||5Aj1>f=h5IF2#@V zBV2~da5*l=6}SRd;!0eFt8g{0#x=MG*Wz0I7(d2O@Dp5z>u^1;#|^jvH{wRzgqv_P zZpKgXQ_RI&%)>m)$9&v^Tktdd47cJ|{2V{WZMY4$<97T4zrZi?OZ*DI!X3B+cj8Xm zg}ZP!?#4a12lwJ$+=u&cKkml^cmNOLK|F+q@N4`Uzrk@f4oI(|8)s;2AuNXYnWe34g|)@f@DR z^LQRF;03&h7x5ST1ux+x{1t!2-|#p59e>9^@DIF%NB`!Dxj?!VlBx&Lzi<^Ie4m-{dGU+%x$f4Tp1|K%NB`!Dxj?!VlBx&Lzi<^Ie4m-{dGU+%x$ zf4Tp1|K%NB`!Dxj?!VlB zx&Lzi<^Ie4m-{dGU+%x$f4Tp1|K%NB`!Dxj?!VlBx&Lzi<^Ie4m-{dGU+%x$f4Tp1|K%NB`!Dxj?!VlBx&Lzi<^Ie4m-{dGU+%x$f4Tp1 z|K%NB`!Dxj?!VlBx&Lzi z<^Ie4m-{dGU+%x$f4Tp1|K%NB`!Dxj?!VlBx&Lzi<^Ie4m-{dGU+%x$f4Tp1|K%NB`!Dxj?!VlBx&Lzi<^Ie4m;0~(`yY&5SrlaD7V;|~ zDl#E2H58tA*N1qp}9S8{(iE)O919 fV-|vM*Zc>V5)PL)vu|?W@K}I(2A$W_&xiB{X5b!W diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_clear_vgpr_lds_arcturus.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_clear_vgpr_lds_arcturus.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_compute.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_compute.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq.bin deleted file mode 100644 index 3400e4dd29474c2bcd6a312e0073777e6bce899e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP1CnIpIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BCnS)`7Up8qF#rGn diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq_gds_read.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_cp_sq_gds_read.bin deleted file mode 100644 index 1efe1c042e7e2ae8c8c2c93d8d9c175d20a3697e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmXxcF$w}P5QX7Co9t?`u~{uFCY`l6^9qZxwvauLS?~mQ9!7`>n1PuO-h(lKKbKQx z_jf941^ePdL#XB8)(YH{=Ji%RrrK@1vAry^l{mPt1d%A+G~3cy>&K5alT}L|sW{lFaXpAX$j$$Q_Rk0v?wzdPU zfy(wbY0K|T!*3D)7{AmL{8ptq$6c`}I<~OepNll#9nMQJ&8Y|N0i{^<8u+0+94cv@ zsRBBY!1FKXEDItKA;rDMLqO<;k9XLS(8`lu(7+$%>9wT(nqF&znl<$`PSgia!b`pp zWw9l~b+O(~aZUI`T*s-B7%1RHl)jr;pl|ErO!cY8+yj1^u6C2L?wpSX`q@}xc8N56M<%)3qN6E)oNFyaw8j#bh$+%0tnjbE4Y%&s z<)mIrdca;ZyO?UVsE>>mAR{bEMH@ZV8EcT9>Fb1aS`+BtL1Qs zmvVTX!>#6UR(#sc>-}j?>_!eZ_H3&{p0%5mTT*=_-}BUSJm4YMJn z9T}*4VsK1FC``2$DR7q}> zYw9dxn)42*#$BmQjgdBoRFj?@T$|2W&R{o#_is+e4>EW;)0dmU%U7rK-3%UN<1_kh z2Agjj`)hmXFGg$O(w(wNcZzmcpo?_eAF!U8Bi5R|WZ|dxtY^imbe|Fj9I-tXvK`iu nw0E5GcFLF8F7YAj7_OGYO0c&qEXBN6h-*D_msOa21NhND&Hz#4 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_dc_restore.bin deleted file mode 100644 index c5b11be40eada2dd55d32fb439b2317ae118ab6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmZQ!U|`_U0}?>M3#EmCv?Gu&45T@Lv>-^5iJ^{>iK&i>iKUL2iLH)-A?OYRLp@6Y sL(l#OCayY%Ieq&Zxwwo#d{)j$wSWG%?`L2rxWmL+&j1o*U})SA0J&Hdvj6}9 diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea.bin deleted file mode 100644 index 578dc7429cdfca512ff07d042342cb2a2fb01659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU2;1CnIpIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<_n%?@z6Ow1g@Om13~ci9|K%GP ofaas~IT|~F$~d-s{ok@*j-dmg4`?TYLI9dxR6ep^28PD{0KlIw@Bjb+ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_02.bin deleted file mode 100644 index d0f2aff8e0ae49efb1f24b425c5fe65d75e740fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU3Z1(IarIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;AA>@{15O4udHELkh7rLA Rh7*HA0Fs|a0Gpw4KLFN$gI53m diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ea_dirty.bin deleted file mode 100644 index 5372f1724351196906a104f7b2e1c4c583b6e0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmXYq!3hE}6hvpU*_gjZkoB4+U;);k*pL;70S_KLND5Fd+kxj~!3wqm%kUO|z&ZQ} zGoKj=z-;)i7Jqh3Q2{GvsDX6}RXY{{*Hq&@RSjgJm>JnNHdwM=&HK<>>#gXH#2Jy1 x8PA9BX|L?Kv-fyVPQCcR@}gPA@Kxsmfk`O zlXcf%<4^v7#mt`}0K%m{dWJnCO~(R8nw0~rjOek}05~=dZk^?V7}|r7Fqc=Ha^VF@ zm2fV&9c5H&l!he7MPj#oP*FkoC{7jLQYpYf-uxDr+*#kju;|#_f-lM(@UJg* jXr?G-;l(MiH@?8+1DHIi(EH) diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_address1.bin deleted file mode 100644 index ae19466d3f43b5231cfcc039cde9f47f6b0833dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP4U%NzIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG_i@O{Ac*H@Be=W21bU4{V>eHkb8rR Wfq@%j9z#OG15R!>b}*ZvaX$bE0vyi( diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_gds_oa_phy.bin deleted file mode 100644 index efc7391e009a59178c1fcf4a0d1eb06dfefb010f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmXXKF;H zH)ST)dFi^0&P&hn936aCor&Ne181lMcAFqc^JFw=W4%|o`c_`${sGX1{!&^k6|Vb* zJh@Ds9fJAg5oq1}TeZYR?1n|@fEc;+zUb7Up(at`m3Ibc!V0PzVm A=l}o! diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_02.bin deleted file mode 100644 index c6efa4715ce4d3be744c5a9f16135f27ffe96e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmZ9FKMKMy6vn?cX>8KER0ok%5yVmO27(vx2p+&QlvW%%I7knmQ*Yp$7Cb>WM{l8n z5R+0DAH4S)zCVuw2$$xV>356_i31D_3j(aH$V6=coGOBQ<9MK!ZZD+5lZE6mV?kWR zQfAVP5^glkLz?2Mu-iU4*wkiyT-1RL=NccSHQ*qvehZ8rqWdARXvEBcpXDjw-`@II gO^~-)U~hea?F+~#`S-qzSL3XJvIO1K>$WqizJ)Y5YybcN diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_lds_address1.bin deleted file mode 100644 index 2da7b4980666ff8d5a643f018ba4d7dfadf108c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP4U%NzIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG_i@O{Ac*H@Be=W21bU4{V>eHkaL3z UY92#E!2?bPHg=HN3=EC?0S1U1xBvhE diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read.bin deleted file mode 100644 index 78335009bd61f30f27d1f58842910ef089b3a384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read_tcc_halt.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_mc_read_tcc_halt.bin deleted file mode 100644 index 126518f5c7672178c8733af2bc6e3cfb648b75b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmXZUUkZXi5XbSK&Z@0xe>5Uut%!(_kcf!r6dl1Mbb=w@dk8PkO)}^N-Jqj18!deH z`!LKX08t^Iy!hWl8aO~Iy%CVxp&veNfNMi|y&VtA)(s-1JyV;Osr)djGh-^_Cah(q zb)+u1KTw`N8vfMof(8s4ijf!#BPL=d=3*h19MX~7bl`~g9Mg_FwB;^sxJL!|Y0U}c QoYIO>p6%`6cNM3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sgpr_02.bin deleted file mode 100644 index f7e785224b574ac135621f75aa4ead456534ceec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmXZVw+#YO00hxFgOebEga~gkYCxhfj>Be%0`R7bfztR$Y_KobU{jzv2^CWNTMten zXao-lG{Y9N7mh}pj5(WdG39E3n?>%Hcv$9Xg_kYnw#n?UuuE=_rF~WoSUY6nh^=FG LlFmNAU&!8H_R}F` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sh_atcl1.bin deleted file mode 100644 index 9a7f85d0f91000d4e982e711f728efc9d2a86898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU1T3zB5xIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|+9~V>N fff}eeHUDcG7=VUyGM3#EmCG!r8OgD{Yu#LU2;29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;pVWV;b_M|kh6aW|`*@fV m57a=-;^9z)vk%~r<7n(?U|`_b^8SCzeg=k?17Ph8jr#%mTPe%{ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_data_bank_tag.bin deleted file mode 100644 index 73f31aa18897c8c2aa015beed099cb8ec81ca71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU2;29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;pVWV;b_M|kh6aW|`*@fV m4%9%+;^9z$vk%~r<7n(?U|`_b^8SCzeg=k?17Ph8jr#%lgDJ=W diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_dirty_bit.bin deleted file mode 100644 index b36e1036d69e890a2247fe520f25c9887f45f6e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmZ9GO^O0B5QU#HYFg9X;4F>c2|R<~!mWpJZZQnqAUHF&KlA}~<;L~w2C4&Y-FSex z$v~zOq!F{IuU@^ER3rdB=E5hwv(FR_;DuQ>ftfekUF!i9)xZr_+^8llw?+%nQ*^ZK zwoGXvlec@ra%fC$ME^ZvFN(BOI8cToIegNYFFSnEPvDxa%nSwXu_22sXLdB_S&To@ z;?=%!@Aqofg;>-&_-a(^^eLY_<%9o_*G^{{zZ|>e4`!f3U5-f8DYImX@RZ Q?>zyh6XeuR`~Z3N4;QpmU;qFB diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_atcl1.bin deleted file mode 100644 index 8ccfde0863c686a41752324ca6508aa3a1ef0b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139380 zcmeI#O-h1s90cIMUxj86we0N*tvj9Ms)ANt$eBKarsK4{J#6RCw%h&s{`>xA{@K&_>h1iz90yPT0Rs#$zyJdbFu(u<3^2d|1HA_9 z|K4uht!^1$fB^;=V1NMz7+`<_24cYeXCW3O3k)#800Rs#zyJdbFu*{s0sFtVTX(Bl z1{h#~0R|XgfB^;=V1R)bu>VXrcp7+`<_ z1{h#~0R|XgAO`Gz7GgoNzyJdbFu(u<3^2d|0}S*Uu>X6zb+@`@fB^;=V1NMz7+`<_ z1{jC|`=5nakSs9300Rs#zyJdbFu(uSH3^2d|0}L?000Rs#z(B77`@gqacdJ_l7+`<_1{h#~0R|XgfPomW|5=Cy$pQlm zFu(u<3^2d|0}L?GYry{R?bhAumH`GBV1NMz7+`<_1{h!<2JC+pVnMRN00Rs#zyJdb zFu(u<4D=eX|9iW2x4LD30R|XgfB^;=V1NMz7>EJ;pM_YEEHJb7_k3Yhy}?4 z0}L?000Rs#zyJdbFwkqj{_pM9-RhPB1{h#~0R|XgfB^;=U?2wUe->gvvcLcX3^2d| z0}L?000Rv48nFL+yLGp^Wq<(&7+`<_1{h#~0R|X|0sEhYSdc6*zyJdbFu(u<3^2d| i1HA_9|K4uht!^1$fB^;=V1NMz7+`<_24Y~0M3#Emiv@npK#LU1D$jHFJ&(O3VsHBcuJgR>*{K!o^Able}{m4<6 V|0oH2Muvv{qnNTVU|?w64*)MT@<9Lq diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_sqc_inst_bank_snop.bin deleted file mode 100644 index 46b24b590998a24d19309feed263c89a5e8a01be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4044 zcmeIwF%bYD3`5ayFv0>p&>3Wiu5jMa8 Y1~7mD3}65Q7{CAqFn|FJ{52qLdx3=I_y7O^ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ta_address1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_ta_address1.bin deleted file mode 100644 index 78335009bd61f30f27d1f58842910ef089b3a384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuz|6oP29jjsIsl>=7<%?IGaSCi$jZP1qM6uv zSU6c_CdqKfG_rBYPLh?8X_R3Ss^bL8adPsoG%(EH$B+>4fRlku9;BBcp#a2Y2eTO( G_X7aa92Lm` diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02.bin deleted file mode 100644 index 82c857dd7d63be1025aa3bfbd420c06f3a82fa8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;1(f^GFkv4f!_uV;EY1fUK#JM84uB{I zhMxV*42Lf=vNEuMXeM?Z7A{tqNiv)=jcnYqlVoLN8fBP->NtUNoSZx?91QdJH89NI z$DmN~fRlku9;9EsMZSTfv7>>3fn&?h|1JCF7&@S80^n*Gm?i3v)%^gf1G$L-*-Z?M F`vJzGG6?_x diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_02_ea.bin deleted file mode 100644 index 602c0c115f2af09d460a239acc368265d59a3fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;3X){wIsl>=7<%^qXIQZB|NH;{B@`su zm>CXVWMpMv0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|@%Y`4;&Gj>e7#1_q8TKmWJvmt*LFstJIrVPKZ1Lss_#sE&c5aX$d7w=ZS@ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_02.bin deleted file mode 100644 index 8a69de8835e71b9cbdc19519a3ae59cbfa0c36c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmeH}O-chX7>3_TreiaXbf_+7kv0)rxbh4h!2>9G5D^1fe{eMis0Hx={;X#NPtY6G z6L^I9POTt0Ko^oM=H>Yk$nfPMBn40$@WZjS${{mPfNf?ifq~#;mcMsvfcw^C*7z^) zD_c#JGm`}7S>kG0M+vZgE%7l=dPutz8%3J;bgh+k+2*JoY3;Nao-58NRd7uz5{KIDGD zMZjgiI{{Y#>ws;*djanU9RKg<{`ftgf7HLRn_d9pw-bNa3f#Utc1|AMeDXfE)>{Wl SCnLvxtkH+RPIhkvz_s7u!}0I{ diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_03.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_03.bin deleted file mode 100644 index 1318fcb6ffe2e53fca83f5165bc048f29dd32310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3336 zcmeI#J&w~*7=_^z$H~~4i?9Y4F7A+v)mLgxHmd+@oeIEKK1SN^n7>jee0vM zXQ_Rcrq0fp-i;rPl$xp8>D^viyHxh{yRFUV-Mm#Z91qXqANN78t<%;;-M3EO96Ool zdLJqMcrm&>w0gVOWOi%KRIgS4Xut(7afJ=8af4fwy?e(z47k80uCT#1Zg7i=$isjO zT;d8FT;m3}sD2*w_lp4+xWpAUxW)}`QSqO=7!!1uVU7iQ3|L}?HEKdWCg?E391HXq zu*3>$)RcTo&|!u-7U(fxi51qU6Y?=ZhZ*KrpvQnER#>AF@-ab&8Rl4^$ABePSfdU0 zV_#xS&|!u-7U(fxi51qU8Tpu?!whpQ&||<7E38qcD7lPHn+5T`NMv5L+C=QVAmdwhvzZ$VR#?@lX>uW OCVsY=*#DoA+QV diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_04.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tc_atomic_04.bin deleted file mode 100644 index ce1ac3d93ade7b9cb1baba678f5b5e6ff9acc862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20600 zcmeI)PmUW!6vy#5wr5i96rz|EP(URvq+ax*h586BA+hcw^bz_12(_h5_#+mr5$ljm z4gkrPaRevG4d4W<$SyKv*Ox1xES?whQMawI=x2Z$HP&c-5viv9zzOGs{QWCh3tM=%gy<`IFWq*+qL}h`r=YHCs+6E zW_uZLV-@#T_aELqjBy`V*WXn6xvH}HHCM0KpI=Cot+Ge?`A(MnR_^OR^SRybxZBI9 z$J&qoc|6Duc}(ZADDUSn`RqIgKSQpYG&x`+FXlaxxG7vk5!waljEL zoN+k6hnP9Xwjj^fDsec*kFr!Vn2_U4H~rQ&||=e32SVyMcGmx4O(>QF<``mH8$9y z+^0SowCK=dz=#QJY_LVK)JKCB9eNBHF=34jws^WHpRZR;*kO+YjyU0r3(5!7!-O67 zIN*pA&bXjlQx6k%*yDgBPB`O&@_>4nu)`h)9C5-K7nD=}$@BXL4O(<~&Pn-of#Zk? zYizJZ`H=c((4s?+0V5`?vB4JQBkH3;iw->ojF_;-23wSmsgDLNI`kMYV!|35Y*7OB z(V#_#9s@>9SYv}N$|uxEgBBfn3>YzCjSaRapHd$UT6E|!V8nzqHrS$kMtwAB(V@qH z5fj$fV2cu|j|MF|^cXN=!WtWFF;_416DI7i#{oy2aK;6N+~Y7|hdmBB;)F9UDC8c8 z2|Mg@z!4{$aX}&XI84}Kj{}Z4;fxDve#-y&Jnw3LDt*xWRQjO#sq{hfQ|W`|r_u+_ zPo)o+Q`!hVTB$pXp2KnD&zL-=N3Z4;>GBJ?MO(^P%1k^nR#$K=Xj+0nG!N z2Q&|89?(3Xc|h}k<^jzEng=uwXdci!pm{*^faU?s1DXdk4`?3HJfL|%^MK|7%>$YT mG!JMVc<1xLf1e3_`_JP;`M$sVbO)#1OXB&&d?)p02UksAuQ4I5vv@a^a^~|2@)sh0g%cG zxB!xQDMiBGv4GWNk*BdOIU0}Oo2SG8(nER4v$>9aiQNF$l2}GSuPu{F_qkaE+}0NJ z%D!7WC7vl(9UwxgjPW|E>qzh^9r0=!quhD@}GVt3s&9{b*7nJ6=Zd zTA$M3#EmCG!r8OgD{Yu#LU2;0Fq?mIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|xl19k diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tcp_utcl1_fifo1.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_tcp_utcl1_fifo1.bin deleted file mode 100644 index b1dddf5fe4f5a187459547f5ed9f76358a6256d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZQ!U|`_U0}?>M3#EmCG&3UugD{Yu#LU2;1CnIpIsl>=Sh)@efEhjenHdgWWMpMv z0ntqCJS<$SGLvLDWg6MIWhcqX$TZ3@3Dt1|i_TqO-KlX Tt7Tx8s6$u(9jKmxp>aO|q%7#N%w9rO~;pz#FWz+>oytue+w{5SlU zFM(|1%4PPYb`$|D96JGPKgQ|B1NMX9b`K(?XE@1Z8kx>0W8-Pw<;GYO>PopysZ5Sq w&mkb;*w>u;D~FzP_fW)z|0o(7Hld)PqO{OUShE^W;0-*6R`}N#;}r9X zc^L^H-*RylUmB)}fF*Mfz$T0;y95Be7r5P{1Trw5*TAoPPt03oD}l diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr.bin deleted file mode 100644 index 3be99fde9abe814627cdbae111ba518ed9e85000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yuzzn28l5AWDKokQ*&wgfx!xtG@8CXCx6FUzJ yC#%dP84j67HZIvovNAG_GE72soIp8FP9By9hWYy#5&|A@GO)>m^fE9s?gs$ja}u=x diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_01.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_01.bin deleted file mode 100644 index 0d98d2a2a889a3825d780bb38ca3fa3bc10f20ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmZQ!U|`_U0}?>M3#EmCG!r8OgD{Yu#LU1T0g`0nIsl>=7<%?IGaSCi$jZP1qM6uv zSh!eaCdqKhG_rBaPLh?8X_R3Ss^bL8adPsoa4^i<*T67;AA>@{15O4ud60hj7WoE_ U#*PLC297O1|F`UCU})SA0H@{}%>V!Z diff --git a/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin b/ras_prebuild/sp3/gfx9/edc/bin/vega20/gc_edc_vgpr_02.bin deleted file mode 100644 index e54d2c852e631b57a3ad05c0b0b9d19e2e80b8da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmXZU%?g455Cq`W@nrs#N=S%^NQi_)h)7r8Yrs?2=z+9Ha}Lg7zTL}sW)}1+B|J>z zM}I1RFw1qj_FWxhbaADFT;60MOIgWUHZtA*N1qp}9S8{(iE)O919 fV-|vM*Zc>V5)PL)vu|?W@K}I(2A$W_&xiB{X5b!W diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq.sp3 deleted file mode 100644 index e1554afa66..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq.sp3 +++ /dev/null @@ -1,59 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -v_mov_b32 v10, v0 -//buffer_load_dword v10, v9, s24, s31 idxen:1 glc:1 -//s_waitcnt 0 -//v_mov_b32 v11, v1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq_gds_read.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq_gds_read.sp3 deleted file mode 100644 index a80ea56817..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cp_sq_gds_read.sp3 +++ /dev/null @@ -1,60 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -//read from the GDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 - -v_mov_b32 v12, v11 - -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cs_trap_handler.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cs_trap_handler.sp3 deleted file mode 100644 index 5e4eb34c79..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_cs_trap_handler.sp3 +++ /dev/null @@ -1,673 +0,0 @@ -shader main - -type(CS) - -/*************************************************************************/ -/* control on how to run the shader */ -/*************************************************************************/ -//any hack that needs to be made to run this code in EMU (either becasue various EMU code are not ready or no compute save & restore in EMU run) -var EMU_RUN_HACK = 1 -var EMU_RUN_HACK_RESTORE_NORMAL = 0 -var EMU_RUN_HACK_SAVE_NORMAL_EXIT = 0 -var EMU_RUN_HACK_SAVE_SINGLE_WAVE = 0 -var EMU_RUN_HACK_SAVE_FIRST_TIME = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_LO = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_HI = 0 //for interrupted restore in which the first save is through EMU_RUN_HACK -var SAVE_LDS = 0 -var WG_BASE_ADDR_LO = 0x9000a000 -var WG_BASE_ADDR_HI = 0x0 -var WAVE_SPACE = 0x5000 //memory size that each wave occupies in workgroup state mem -var CTX_SAVE_CONTROL = 0x0 -var CTX_RESTORE_CONTROL = CTX_SAVE_CONTROL -var SIM_RUN_HACK = 0 //any hack that needs to be made to run this code in SIM (either becasue various RTL code are not ready or no compute save & restore in RTL run) -var SGPR_SAVE_USE_SQC = 0 //use SQC D$ to do the write -var USE_MTBUF_INSTEAD_OF_MUBUF = 0 //need to change BUF_DATA_FORMAT in S_SAVE_BUF_RSRC_WORD3_MISC from 0 to BUF_DATA_FORMAT_32 if set to 1 (i.e. 0x00827FAC) -var SWIZZLE_EN = 0 //whether we use swizzled buffer addressing - -/**************************************************************************/ -/* variables */ -/**************************************************************************/ -var SQ_WAVE_STATUS_INST_ATC_SHIFT = 23 -var SQ_WAVE_STATUS_INST_ATC_MASK = 0x00800000 - -var SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT = 12 -var SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE = 9 -var SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT = 8 -var SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE = 6 -var SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT = 24 -var SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE = 3 //FIXME sq.blk still has 4 bits at this time while SQ programming guide has 3 bits - -var SQ_WAVE_TRAPSTS_SAVECTX_MASK = 0x400 -var SQ_WAVE_TRAPSTS_SAVECTX_SHIFT = 10 -var SQ_WAVE_TRAPSTS_MEM_VIOL_MASK = 0x100 -var SQ_WAVE_TRAPSTS_MEM_VIOL_SHIFT = 8 -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_MASK = 0x3FF -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_SHIFT = 0x0 -var SQ_WAVE_TRAPSTS_PRE_SAVECTX_SIZE = 10 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_MASK = 0xFFFFF800 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT = 11 -var SQ_WAVE_TRAPSTS_POST_SAVECTX_SIZE = 21 - -var SQ_WAVE_IB_STS_RCNT_SHIFT = 16 //FIXME -var SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT = 15 //FIXME -var SQ_WAVE_IB_STS_RCNT_FIRST_REPLAY_MASK_NEG = 0x00007FFF //FIXME - -var SQ_BUF_RSRC_WORD1_ATC_SHIFT = 24 -var SQ_BUF_RSRC_WORD3_MTYPE_SHIFT = 27 - - -/* Save */ -var S_SAVE_BUF_RSRC_WORD1_STRIDE = 0x00040000 //stride is 4 bytes -var S_SAVE_BUF_RSRC_WORD3_MISC = 0x00807FAC //SQ_SEL_X/Y/Z/W, BUF_NUM_FORMAT_FLOAT, (0 for MUBUF stride[17:14] when ADD_TID_ENABLE and BUF_DATA_FORMAT_32 for MTBUF), ADD_TID_ENABLE - -var S_SAVE_SPI_INIT_ATC_MASK = 0x08000000 //bit[27]: ATC bit -var S_SAVE_SPI_INIT_ATC_SHIFT = 27 -var S_SAVE_SPI_INIT_MTYPE_MASK = 0x70000000 //bit[30:28]: Mtype -var S_SAVE_SPI_INIT_MTYPE_SHIFT = 28 -var S_SAVE_SPI_INIT_FIRST_WAVE_MASK = 0x04000000 //bit[26]: FirstWaveInTG -var S_SAVE_SPI_INIT_FIRST_WAVE_SHIFT = 26 - -var S_SAVE_PC_HI_RCNT_SHIFT = 28 //FIXME check with Brian to ensure all fields other than PC[47:0] can be used -var S_SAVE_PC_HI_RCNT_MASK = 0xF0000000 //FIXME -var S_SAVE_PC_HI_FIRST_REPLAY_SHIFT = 27 //FIXME -var S_SAVE_PC_HI_FIRST_REPLAY_MASK = 0x08000000 //FIXME - -var s_save_spi_init_lo = exec_lo -var s_save_spi_init_hi = exec_hi - - //tba_lo and tba_hi need to be saved/restored -var tba_lo = ttmp12 -var tba_hi = ttmp13 -var tma_lo = ttmp14 -var tma_hi = ttmp15 - -var s_save_pc_lo = ttmp0 //{TTMP1, TTMP0} = {3¡¯h0,pc_rewind[3:0], HT[0],trapID[7:0], PC[47:0]} -var s_save_pc_hi = ttmp1 -var s_save_exec_lo = ttmp2 -var s_save_exec_hi = ttmp3 -var s_save_status = ttmp4 -var s_save_trapsts = ttmp5 //not really used until the end of the SAVE routine -var s_save_xnack_mask_lo = ttmp6 -var s_save_xnack_mask_hi = ttmp7 -var s_save_buf_rsrc0 = ttmp8 -var s_save_buf_rsrc1 = ttmp9 -var s_save_buf_rsrc2 = ttmp10 -var s_save_buf_rsrc3 = ttmp11 - -var s_save_mem_offset = tma_lo -var s_save_alloc_size = s_save_trapsts //conflict -var s_save_tmp = s_save_buf_rsrc2 //shared with s_save_buf_rsrc2 (conflict: should not use mem access with s_save_tmp at the same time) -var s_save_m0 = tma_hi - -/* Restore */ -var S_RESTORE_BUF_RSRC_WORD1_STRIDE = S_SAVE_BUF_RSRC_WORD1_STRIDE -var S_RESTORE_BUF_RSRC_WORD3_MISC = S_SAVE_BUF_RSRC_WORD3_MISC - -var S_RESTORE_SPI_INIT_ATC_MASK = 0x08000000 //bit[27]: ATC bit -var S_RESTORE_SPI_INIT_ATC_SHIFT = 27 -var S_RESTORE_SPI_INIT_MTYPE_MASK = 0x70000000 //bit[30:28]: Mtype -var S_RESTORE_SPI_INIT_MTYPE_SHIFT = 28 -var S_RESTORE_SPI_INIT_FIRST_WAVE_MASK = 0x04000000 //bit[26]: FirstWaveInTG -var S_RESTORE_SPI_INIT_FIRST_WAVE_SHIFT = 26 - -var S_RESTORE_PC_HI_RCNT_SHIFT = S_SAVE_PC_HI_RCNT_SHIFT -var S_RESTORE_PC_HI_RCNT_MASK = S_SAVE_PC_HI_RCNT_MASK -var S_RESTORE_PC_HI_FIRST_REPLAY_SHIFT = S_SAVE_PC_HI_FIRST_REPLAY_SHIFT -var S_RESTORE_PC_HI_FIRST_REPLAY_MASK = S_SAVE_PC_HI_FIRST_REPLAY_MASK - -var s_restore_spi_init_lo = exec_lo -var s_restore_spi_init_hi = exec_hi - -var s_restore_mem_offset = ttmp2 -var s_restore_alloc_size = ttmp3 -var s_restore_tmp = ttmp6 //tba_lo/hi need to be restored -var s_restore_mem_offset_save = s_restore_tmp //no conflict - -var s_restore_m0 = s_restore_alloc_size //no conflict - -var s_restore_mode = ttmp7 - -var s_restore_pc_lo = ttmp0 -var s_restore_pc_hi = ttmp1 -var s_restore_exec_lo = tma_lo //no conflict -var s_restore_exec_hi = tma_hi //no conflict -var s_restore_status = ttmp4 -var s_restore_trapsts = ttmp5 -var s_restore_xnack_mask_lo = xnack_mask_lo -var s_restore_xnack_mask_hi = xnack_mask_hi -var s_restore_buf_rsrc0 = ttmp8 -var s_restore_buf_rsrc1 = ttmp9 -var s_restore_buf_rsrc2 = ttmp10 -var s_restore_buf_rsrc3 = ttmp11 - -/**************************************************************************/ -/* trap handler entry points */ -/**************************************************************************/ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) //hack to use trap_id for determining save/restore - //FIXME VCCZ un-init assertion s_getreg_b32 s_save_status, hwreg(HW_REG_STATUS) //save STATUS since we will change SCC - s_and_b32 s_save_tmp, s_save_pc_hi, 0xffff0000 //change SCC - s_cmp_eq_u32 s_save_tmp, 0x007e0000 //Save: trap_id = 0x7e. Restore: trap_id = 0x7f. - s_cbranch_scc0 L_JUMP_TO_RESTORE //do not need to recover STATUS here since we are going to RESTORE - //FIXME s_setreg_b32 hwreg(HW_REG_STATUS), s_save_status //need to recover STATUS since we are going to SAVE - s_branch L_SKIP_RESTORE //NOT restore, SAVE actually - else - s_branch L_SKIP_RESTORE //NOT restore. might be a regular trap or save - end - -L_JUMP_TO_RESTORE: - s_branch L_RESTORE //restore - -L_SKIP_RESTORE: - - s_getreg_b32 s_save_status, hwreg(HW_REG_STATUS) //save STATUS since we will change SCC - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - s_and_b32 s_save_trapsts, s_save_trapsts, SQ_WAVE_TRAPSTS_SAVECTX_MASK //check whether this is for save - s_cbranch_scc1 L_SAVE //this is the operation for save - //the poential code (such as restore STATUS) on this path is for regular trap handling and don't care for compute save & restore - - //EMU will not execute the code since in hack mode it is skipped while in normal mode there is no save in EMU - //SIM will only execute the code in normal S/R mode but not in hack mode - if (!EMU_RUN_HACK) - L_ERROR: //to catch incorrect savectx setting in SIM assuming the trap handler is only used for save & restore - s_branch L_ERROR - end - -/**************************************************************************/ -/* save routine */ -/**************************************************************************/ - -L_SAVE: - - //check whether there is mem_viol - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - s_and_b32 s_save_trapsts, s_save_trapsts, SQ_WAVE_TRAPSTS_MEM_VIOL_MASK - s_cbranch_scc0 L_NO_PC_REWIND - - //if so, need rewind PC assuming GDS operation gets NACKed - s_mov_b32 s_save_tmp, 0 //clear mem_viol bit - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_MEM_VIOL_SHIFT, 1), s_save_tmp //clear mem_viol bit - s_and_b32 s_save_pc_hi, s_save_pc_hi, 0x0000ffff //pc[47:32] - s_sub_u32 s_save_pc_lo, s_save_pc_lo, 8 //pc[31:0]-8 - s_subb_u32 s_save_pc_hi, s_save_pc_hi, 0x0 // -scc - -L_NO_PC_REWIND: - s_mov_b32 s_save_tmp, 0 //clear saveCtx bit - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_SAVECTX_SHIFT, 1), s_save_tmp //clear saveCtx bit - - s_mov_b32 s_save_xnack_mask_lo, xnack_mask_lo //save XNACK_MASK - s_mov_b32 s_save_xnack_mask_hi, xnack_mask_hi - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS, SQ_WAVE_IB_STS_RCNT_SHIFT, SQ_WAVE_IB_STS_RCNT_SIZE) //save RCNT - s_lshl_b32 s_save_tmp, s_save_tmp, S_SAVE_PC_HI_RCNT_SHIFT - s_or_b32 s_save_pc_hi, s_save_pc_hi, s_save_tmp - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS, SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT, SQ_WAVE_IB_STS_FIRST_REPLAY_SIZE) //save FIRST_REPLAY - s_lshl_b32 s_save_tmp, s_save_tmp, S_SAVE_PC_HI_FIRST_REPLAY_SHIFT - s_or_b32 s_save_pc_hi, s_save_pc_hi, s_save_tmp - s_getreg_b32 s_save_tmp, hwreg(HW_REG_IB_STS) //clear RCNT and FIRST_REPLAY in IB_STS - s_and_b32 s_save_tmp, s_save_tmp, SQ_WAVE_IB_STS_RCNT_FIRST_REPLAY_MASK_NEG - - s_setreg_b32 hwreg(HW_REG_IB_STS), s_save_tmp - - /* inform SPI the readiness and wait for SPI's go signal */ - s_mov_b32 s_save_exec_lo, exec_lo //save EXEC and use EXEC for the go signal from SPI - s_mov_b32 s_save_exec_hi, exec_hi - s_mov_b64 exec, 0x0 //clear EXEC to get ready to receive - if (EMU_RUN_HACK) - - else - s_sendmsg sendmsg(MSG_SAVEWAVE) //send SPI a message and wait for SPI's write to EXEC - end - - L_SLEEP: - s_sleep 0x2 - - if (EMU_RUN_HACK) - - else - s_cbranch_execz L_SLEEP - end - - - /* setup Resource Contants */ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_SAVE_SINGLE_WAVE)) - //calculate wd_addr using absolute thread id - v_readlane_b32 s_save_tmp, v9, 0 - s_lshr_b32 s_save_tmp, s_save_tmp, 6 - s_mul_i32 s_save_tmp, s_save_tmp, WAVE_SPACE - s_add_i32 s_save_spi_init_lo, s_save_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_save_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_save_spi_init_hi, s_save_spi_init_hi, CTX_SAVE_CONTROL - else - end - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_SAVE_SINGLE_WAVE)) - s_add_i32 s_save_spi_init_lo, s_save_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_save_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_save_spi_init_hi, s_save_spi_init_hi, CTX_SAVE_CONTROL - else - end - - - s_mov_b32 s_save_buf_rsrc0, s_save_spi_init_lo //base_addr_lo - s_and_b32 s_save_buf_rsrc1, s_save_spi_init_hi, 0x0000FFFF //base_addr_hi - s_or_b32 s_save_buf_rsrc1, s_save_buf_rsrc1, S_SAVE_BUF_RSRC_WORD1_STRIDE - s_mov_b32 s_save_buf_rsrc2, 0 //NUM_RECORDS initial value = 0 (in bytes) although not neccessarily inited - s_mov_b32 s_save_buf_rsrc3, S_SAVE_BUF_RSRC_WORD3_MISC - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_ATC_MASK - s_lshr_b32 s_save_tmp, s_save_tmp, (S_SAVE_SPI_INIT_ATC_SHIFT-SQ_BUF_RSRC_WORD1_ATC_SHIFT) //get ATC bit into position - s_or_b32 s_save_buf_rsrc3, s_save_buf_rsrc3, s_save_tmp //or ATC - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_MTYPE_MASK - s_lshr_b32 s_save_tmp, s_save_tmp, (S_SAVE_SPI_INIT_MTYPE_SHIFT-SQ_BUF_RSRC_WORD3_MTYPE_SHIFT) //get MTYPE bits into position - s_or_b32 s_save_buf_rsrc3, s_save_buf_rsrc3, s_save_tmp //or MTYPE - - //FIXME right now s_save_m0/s_save_mem_offset use tma_lo/tma_hi (might need to save them before using them?) - s_mov_b32 s_save_m0, m0 //save M0 - - /* global mem offset */ - s_mov_b32 s_save_mem_offset, 0x0 //mem offset initial value = 0 - - - /* the first wave in the threadgroup */ - s_barrier //FIXME not performance-optimal "LDS is used? wait for other waves in the same TG" - s_and_b32 s_save_tmp, s_save_spi_init_hi, S_SAVE_SPI_INIT_FIRST_WAVE_MASK //exec is still used here - s_cbranch_scc0 L_SAVE_VGPR - - /* save LDS */ - ////////////////////////////// - L_SAVE_LDS: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_LDS_ALLOC,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE) //lds_size - s_and_b32 s_save_alloc_size, s_save_alloc_size, 0xFFFFFFFF //lds_size is zero? - s_cbranch_scc0 L_SAVE_VGPR //no lds used? jump to L_SAVE_VGPR - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 6 //LDS size in dwords = lds_size * 64dw - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 2 //LDS size in bytes - s_mov_b32 s_save_buf_rsrc2, s_save_alloc_size //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 m0, 0x0 //lds_offset initial value = 0 - - L_SAVE_LDS_LOOP: - if (SAVE_LDS) - buffer_store_lds_dword s_save_buf_rsrc0, s_save_mem_offset lds:1 - end - s_add_u32 m0, m0, 256 //every buffer_store_lds does 256 bytes - s_add_u32 s_save_mem_offset, s_save_mem_offset, 256 //mem offset increased by 256 bytes - s_cmp_lt_u32 m0, s_save_alloc_size //scc=(m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_LDS_LOOP //LDS save is complete? - - - /* save VGPRs */ - ////////////////////////////// - L_SAVE_VGPR: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE) //vpgr_size - s_add_u32 s_save_alloc_size, s_save_alloc_size, 1 - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 2 //Number of VGPRs = (vgpr_size + 1) * 4 (non-zero value) //FIXME for GFX, zero is possible - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 8 //NUM_RECORDS in bytes (64 threads*4) - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - s_mov_b32 m0, 0x0 //VGPR initial index value =0 - s_set_gpr_idx_on m0, 0x1 //M0[7:0] = M0[7:0] and M0[15:12] = 0x1 - s_add_u32 s_save_alloc_size, s_save_alloc_size, 0x1000 //add 0x1000 since we compare m0 against it later - - L_SAVE_VGPR_LOOP: - v_mov_b32 v0, v0 //v0 = v[0+m0] - - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_store_format_x v0, v0, s_save_buf_rsrc0, s_save_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_store_dword v0, v0, s_save_buf_rsrc0, s_save_mem_offset slc:1 glc:1 - end - - s_add_u32 m0, m0, 1 //next vgpr index - s_add_u32 s_save_mem_offset, s_save_mem_offset, 256 //every buffer_store_dword does 256 bytes - s_cmp_lt_u32 m0, s_save_alloc_size //scc = (m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_VGPR_LOOP //VGPR save is complete? - s_set_gpr_idx_off - - /* save SGPRs */ - ////////////////////////////// - s_getreg_b32 s_save_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE) //spgr_size - s_add_u32 s_save_alloc_size, s_save_alloc_size, 1 - s_lshl_b32 s_save_alloc_size, s_save_alloc_size, 4 //Number of SGPRs = (sgpr_size + 1) * 16 (non-zero value) - - if (SGPR_SAVE_USE_SQC) - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 2 //NUM_RECORDS in bytes - else - s_lshl_b32 s_save_buf_rsrc2, s_save_alloc_size, 8 //NUM_RECORDS in bytes (64 threads) - end - - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - s_mov_b32 m0, 0x0 //SGPR initial index value =0 - s_nop 0x0 //Manually inserted wait states - - L_SAVE_SGPR_LOOP: - s_movrels_b32 s0, s0 //s0 = s[0+m0] - write_sgpr_to_mem(s0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //PV: the best performance should be using s_buffer_store_dwordx4 - s_add_u32 m0, m0, 1 //next sgpr index - s_cmp_lt_u32 m0, s_save_alloc_size //scc = (m0 < s_save_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_SAVE_SGPR_LOOP //SGPR save is complete? - - /* save HW registers */ - ////////////////////////////// - L_SAVE_HWREG: - s_mov_b32 s_save_buf_rsrc2, 0x4 //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_save_buf_rsrc2, s_save_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_save_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - - write_sgpr_to_mem(s_save_m0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //M0 - - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_SAVE_FIRST_TIME)) - s_add_u32 s_save_pc_lo, s_save_pc_lo, 4 //pc[31:0]+4 - s_addc_u32 s_save_pc_hi, s_save_pc_hi, 0x0 //carry bit over - s_mov_b32 tba_lo, EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_LO - s_mov_b32 tba_hi, EMU_RUN_HACK_SAVE_FIRST_TIME_TBA_HI - end - - write_sgpr_to_mem(s_save_pc_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //PC - write_sgpr_to_mem(s_save_pc_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - write_sgpr_to_mem(s_save_exec_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //EXEC - write_sgpr_to_mem(s_save_exec_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - write_sgpr_to_mem(s_save_status, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //STATUS - - //s_save_trapsts conflicts with s_save_alloc_size - s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) - write_sgpr_to_mem(s_save_trapsts, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TRAPSTS - - write_sgpr_to_mem(s_save_xnack_mask_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //XNACK_MASK_LO - write_sgpr_to_mem(s_save_xnack_mask_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //XNACK_MASK_HI - - //use s_save_tmp would introduce conflict here between s_save_tmp and s_save_buf_rsrc2 - s_getreg_b32 s_save_m0, hwreg(HW_REG_MODE) //MODE - write_sgpr_to_mem(s_save_m0, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) - - write_sgpr_to_mem(tba_lo, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TBA_LO - write_sgpr_to_mem(tba_hi, s_save_buf_rsrc0, s_save_mem_offset, SGPR_SAVE_USE_SQC, USE_MTBUF_INSTEAD_OF_MUBUF) //TBA_HI - - /* S_PGM_END_SAVED */ //FIXME graphics ONLY - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_SAVE_NORMAL_EXIT)) - s_and_b32 s_save_pc_hi, s_save_pc_hi, 0x0000ffff //pc[47:32] - s_add_u32 s_save_pc_lo, s_save_pc_lo, 4 //pc[31:0]+4 - s_addc_u32 s_save_pc_hi, s_save_pc_hi, 0x0 //carry bit over - s_rfe_b64 s_save_pc_lo //Return to the main shader program - else - end - - - s_branch L_END_PGM - - - -/**************************************************************************/ -/* restore routine */ -/**************************************************************************/ - -L_RESTORE: - /* Setup Resource Contants */ - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) - //calculate wd_addr using absolute thread id - v_readlane_b32 s_restore_tmp, v9, 0 - s_lshr_b32 s_restore_tmp, s_restore_tmp, 6 - s_mul_i32 s_restore_tmp, s_restore_tmp, WAVE_SPACE - s_add_i32 s_restore_spi_init_lo, s_restore_tmp, WG_BASE_ADDR_LO - s_mov_b32 s_restore_spi_init_hi, WG_BASE_ADDR_HI - s_and_b32 s_restore_spi_init_hi, s_restore_spi_init_hi, CTX_RESTORE_CONTROL - else - end - - s_mov_b32 s_restore_buf_rsrc0, s_restore_spi_init_lo //base_addr_lo - s_and_b32 s_restore_buf_rsrc1, s_restore_spi_init_hi, 0x0000FFFF //base_addr_hi - s_or_b32 s_restore_buf_rsrc1, s_restore_buf_rsrc1, S_RESTORE_BUF_RSRC_WORD1_STRIDE - s_mov_b32 s_restore_buf_rsrc2, 0 //NUM_RECORDS initial value = 0 (in bytes) - s_mov_b32 s_restore_buf_rsrc3, S_RESTORE_BUF_RSRC_WORD3_MISC - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_ATC_MASK - s_lshr_b32 s_restore_tmp, s_restore_tmp, (S_RESTORE_SPI_INIT_ATC_SHIFT-SQ_BUF_RSRC_WORD1_ATC_SHIFT) //get ATC bit into position - s_or_b32 s_restore_buf_rsrc3, s_restore_buf_rsrc3, s_restore_tmp //or ATC - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_MTYPE_MASK - s_lshr_b32 s_restore_tmp, s_restore_tmp, (S_RESTORE_SPI_INIT_MTYPE_SHIFT-SQ_BUF_RSRC_WORD3_MTYPE_SHIFT) //get MTYPE bits into position - s_or_b32 s_restore_buf_rsrc3, s_restore_buf_rsrc3, s_restore_tmp //or MTYPE - - /* global mem offset */ - s_mov_b32 s_restore_mem_offset, 0x0 //mem offset initial value = 0 - - /* the first wave in the threadgroup */ - s_and_b32 s_restore_tmp, s_restore_spi_init_hi, S_RESTORE_SPI_INIT_FIRST_WAVE_MASK - s_cbranch_scc0 L_RESTORE_VGPR - - /* restore LDS */ - ////////////////////////////// - L_RESTORE_LDS: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on //be consistent with SAVE although can be moved ahead - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_LDS_ALLOC,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SHIFT,SQ_WAVE_LDS_ALLOC_LDS_SIZE_SIZE) //lds_size - s_and_b32 s_restore_alloc_size, s_restore_alloc_size, 0xFFFFFFFF //lds_size is zero? - s_cbranch_scc0 L_RESTORE_VGPR //no lds used? jump to L_RESTORE_VGPR - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 6 //LDS size in dwords = lds_size * 64dw - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 2 //LDS size in bytes - s_mov_b32 s_restore_buf_rsrc2, s_restore_alloc_size //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 m0, 0x0 //lds_offset initial value = 0 - - L_RESTORE_LDS_LOOP: - if (SAVE_LDS) - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset lds:1 - end - s_add_u32 m0, m0, 256 //every buffer_load_dword does 256 bytes - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 //mem offset increased by 256 bytes - s_cmp_lt_u32 m0, s_restore_alloc_size //scc=(m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_LDS_LOOP //LDS restore is complete? - - - /* restore VGPRs */ - ////////////////////////////// - L_RESTORE_VGPR: - - s_mov_b32 exec_lo, 0xFFFFFFFF //need every thread from now on //be consistent with SAVE although can be moved ahead - s_mov_b32 exec_hi, 0xFFFFFFFF - - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_VGPR_SIZE_SIZE) //vpgr_size - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 1 - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 2 //Number of VGPRs = (vgpr_size + 1) * 4 (non-zero value) - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 8 //NUM_RECORDS in bytes (64 threads*4) - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - s_mov_b32 s_restore_mem_offset_save, s_restore_mem_offset // restore start with v1, v0 will be the last - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 - s_mov_b32 m0, 1 //VGPR initial index value = 1 - s_set_gpr_idx_on m0, 0x8 //M0[7:0] = M0[7:0] and M0[15:12] = 0x8 - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 0x8000 //add 0x8000 since we compare m0 against it later - - L_RESTORE_VGPR_LOOP: - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_load_format_x v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset slc:1 glc:1 - end - s_waitcnt vmcnt(0) //ensure data ready - v_mov_b32 v0, v0 //v[0+m0] = v0 - s_add_u32 m0, m0, 1 //next vgpr index - s_add_u32 s_restore_mem_offset, s_restore_mem_offset, 256 //every buffer_load_dword does 256 bytes - s_cmp_lt_u32 m0, s_restore_alloc_size //scc = (m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_VGPR_LOOP //VGPR restore (except v0) is complete? - s_set_gpr_idx_off - /* VGPR restore on v0 */ - if(USE_MTBUF_INSTEAD_OF_MUBUF) - tbuffer_load_format_x v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset_save format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - else - buffer_load_dword v0, v0, s_restore_buf_rsrc0, s_restore_mem_offset_save slc:1 glc:1 - end - - - /* restore SGPRs */ - ////////////////////////////// - s_getreg_b32 s_restore_alloc_size, hwreg(HW_REG_GPR_ALLOC,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SHIFT,SQ_WAVE_GPR_ALLOC_SGPR_SIZE_SIZE) //spgr_size - s_add_u32 s_restore_alloc_size, s_restore_alloc_size, 1 - s_lshl_b32 s_restore_alloc_size, s_restore_alloc_size, 4 //Number of SGPRs = (sgpr_size + 1) * 16 (non-zero value) - - if (SGPR_SAVE_USE_SQC) - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 2 //NUM_RECORDS in bytes - else - s_lshl_b32 s_restore_buf_rsrc2, s_restore_alloc_size, 8 //NUM_RECORDS in bytes (64 threads) - end - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - read_sgpr_from_mem(s_restore_tmp, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //save s0 to s_restore_tmp - s_mov_b32 m0, 0x1 //SGPR initial index value =1 //go on with with s1 - - L_RESTORE_SGPR_LOOP: - read_sgpr_from_mem(s0, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //PV: further performance improvement can be made - s_waitcnt lgkmcnt(0) //ensure data ready - s_movreld_b32 s0, s0 //s[0+m0] = s0 - s_add_u32 m0, m0, 1 //next sgpr index - s_cmp_lt_u32 m0, s_restore_alloc_size //scc = (m0 < s_restore_alloc_size) ? 1 : 0 - s_cbranch_scc1 L_RESTORE_SGPR_LOOP //SGPR restore (except s0) is complete? - s_mov_b32 s0, s_restore_tmp /* SGPR restore on s0 */ - - /* restore HW registers */ - ////////////////////////////// - L_RESTORE_HWREG: - s_mov_b32 s_restore_buf_rsrc2, 0x4 //NUM_RECORDS in bytes - if (SWIZZLE_EN) - s_add_u32 s_restore_buf_rsrc2, s_restore_buf_rsrc2, 0x0 //FIXME need to use swizzle to enable bounds checking? - else - s_mov_b32 s_restore_buf_rsrc2, 0x1000000 //NUM_RECORDS in bytes - end - - read_sgpr_from_mem(s_restore_m0, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //M0 - read_sgpr_from_mem(s_restore_pc_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //PC - read_sgpr_from_mem(s_restore_pc_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) - read_sgpr_from_mem(s_restore_exec_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //EXEC - read_sgpr_from_mem(s_restore_exec_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) - read_sgpr_from_mem(s_restore_status, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //STATUS - read_sgpr_from_mem(s_restore_trapsts, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TRAPSTS - read_sgpr_from_mem(xnack_mask_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //XNACK_MASK_LO - read_sgpr_from_mem(xnack_mask_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //XNACK_MASK_HI - read_sgpr_from_mem(s_restore_mode, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //MODE - read_sgpr_from_mem(tba_lo, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TBA_LO - read_sgpr_from_mem(tba_hi, s_restore_buf_rsrc0, s_restore_mem_offset, SGPR_SAVE_USE_SQC) //TBA_HI - - s_waitcnt lgkmcnt(0) //from now on, it is safe to restore STATUS and IB_STS - - s_and_b32 s_restore_pc_hi, s_restore_pc_hi, 0x0000ffff //pc[47:32] //Do it here in order not to affect STATUS - - //for normal save & restore, the saved PC points to the next inst to execute, no adjustment needs to be made, otherwise: - if ((EMU_RUN_HACK) && (!EMU_RUN_HACK_RESTORE_NORMAL)) - s_add_u32 s_restore_pc_lo, s_restore_pc_lo, 8 //pc[31:0]+8 //two back-to-back s_trap are used (first for save and second for restore) - s_addc_u32 s_restore_pc_hi, s_restore_pc_hi, 0x0 //carry bit over - end - if ((EMU_RUN_HACK) && (EMU_RUN_HACK_RESTORE_NORMAL)) - s_add_u32 s_restore_pc_lo, s_restore_pc_lo, 4 //pc[31:0]+4 // save is hack through s_trap but restore is normal - s_addc_u32 s_restore_pc_hi, s_restore_pc_hi, 0x0 //carry bit over - end - - s_mov_b32 m0, s_restore_m0 - s_mov_b32 exec_lo, s_restore_exec_lo - s_mov_b32 exec_hi, s_restore_exec_hi - - s_and_b32 s_restore_m0, SQ_WAVE_TRAPSTS_PRE_SAVECTX_MASK, s_restore_trapsts - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_PRE_SAVECTX_SHIFT, SQ_WAVE_TRAPSTS_PRE_SAVECTX_SIZE), s_restore_m0 - s_and_b32 s_restore_m0, SQ_WAVE_TRAPSTS_POST_SAVECTX_MASK, s_restore_trapsts - s_lshr_b32 s_restore_m0, s_restore_m0, SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT - s_setreg_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_POST_SAVECTX_SHIFT, SQ_WAVE_TRAPSTS_POST_SAVECTX_SIZE), s_restore_m0 - //s_setreg_b32 hwreg(HW_REG_TRAPSTS), s_restore_trapsts //don't overwrite SAVECTX bit as it may be set through external SAVECTX during restore - s_setreg_b32 hwreg(HW_REG_MODE), s_restore_mode - //reuse s_restore_m0 as a temp register - s_and_b32 s_restore_m0, s_restore_pc_hi, S_SAVE_PC_HI_RCNT_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, S_SAVE_PC_HI_RCNT_SHIFT - s_lshl_b32 s_restore_m0, s_restore_m0, SQ_WAVE_IB_STS_RCNT_SHIFT - s_mov_b32 s_restore_tmp, 0x0 //IB_STS is zero - s_or_b32 s_restore_tmp, s_restore_tmp, s_restore_m0 - s_and_b32 s_restore_m0, s_restore_pc_hi, S_SAVE_PC_HI_FIRST_REPLAY_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, S_SAVE_PC_HI_FIRST_REPLAY_SHIFT - s_lshl_b32 s_restore_m0, s_restore_m0, SQ_WAVE_IB_STS_FIRST_REPLAY_SHIFT - s_or_b32 s_restore_tmp, s_restore_tmp, s_restore_m0 - s_and_b32 s_restore_m0, s_restore_status, SQ_WAVE_STATUS_INST_ATC_MASK - s_lshr_b32 s_restore_m0, s_restore_m0, SQ_WAVE_STATUS_INST_ATC_SHIFT - s_setreg_b32 hwreg(HW_REG_IB_STS), s_restore_tmp - s_setreg_b32 hwreg(HW_REG_STATUS), s_restore_status - - s_barrier //barrier to ensure the readiness of LDS before access attemps from any other wave in the same TG //FIXME not performance-optimal at this time - - -// s_rfe_b64 s_restore_pc_lo //Return to the main shader program and resume execution - s_rfe_restore_b64 s_restore_pc_lo, s_restore_m0 // s_restore_m0[0] is used to set STATUS.inst_atc - - -/**************************************************************************/ -/* the END */ -/**************************************************************************/ -L_END_PGM: - s_endpgm - -end - - -/**************************************************************************/ -/* the helper functions */ -/**************************************************************************/ - -function write_sgpr_to_mem(s, s_rsrc, s_mem_offset, use_sqc, use_mtbuf) - if (use_sqc) - s_mov_b32 exec_lo, m0 //assuming exec_lo is not needed anymore from this point on - s_mov_b32 m0, s_mem_offset - s_buffer_store_dword s, s_rsrc, m0 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 4 - s_mov_b32 m0, exec_lo - elsif (use_mtbuf) - v_mov_b32 v0, s - tbuffer_store_format_x v0, v0, s_rsrc, s_mem_offset format:BUF_NUM_FORMAT_FLOAT format: BUF_DATA_FORMAT_32 slc:1 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 256 - else - v_mov_b32 v0, s - buffer_store_dword v0, v0, s_rsrc, s_mem_offset slc:1 glc:1 - s_add_u32 s_mem_offset, s_mem_offset, 256 - end -end - - - -function read_sgpr_from_mem(s, s_rsrc, s_mem_offset, use_sqc) - s_buffer_load_dword s, s_rsrc, s_mem_offset glc:1 - if (use_sqc) - s_add_u32 s_mem_offset, s_mem_offset, 4 - else - s_add_u32 s_mem_offset, s_mem_offset, 256 - end -end - - - - - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_dc_restore.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_dc_restore.sp3 deleted file mode 100644 index 21130cd511..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_dc_restore.sp3 +++ /dev/null @@ -1,21 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(4) - v_mov_b32 v0, s0 - v_mov_b32 v1, s1 - v_mov_b32 v2, s2 - v_mov_b32 v3, s3 - flat_load_dword v4, v[0:1] slc - s_waitcnt vmcnt(0)&lgkmcnt(0) - v_mov_b32 v5, 0 - s_sleep 40000 -LOOP: - v_add_co_u32 v5, vcc, 1, v5 - s_waitcnt vmcnt(0)&lgkmcnt(0) - v_cmp_lt_u32 vcc, v5, v4 - s_cbranch_vccnz LOOP - flat_store_dword v[2,3], v5 - s_waitcnt vmcnt(0)&lgkmcnt(0) -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea.sp3 deleted file mode 100644 index 99147cd517..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea.sp3 +++ /dev/null @@ -1,69 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x80 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x80 - -s_waitcnt 0 -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x100 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_02.sp3 deleted file mode 100644 index 0b8e13bdb2..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_02.sp3 +++ /dev/null @@ -1,131 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 - -s_waitcnt 0 - -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_add_u32 s31, s31, 0x4 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_dirty.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_dirty.sp3 deleted file mode 100644 index a3ba2787de..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ea_dirty.sp3 +++ /dev/null @@ -1,61 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -s_mov_b32 s32, 0x4000 -v_mul_i32_i24 v9, v9, s32 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x10000 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 offen:1 -s_waitcnt 0 -s_add_u32 s31, s31, 0x10000 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_02.sp3 deleted file mode 100644 index 55f5ceec97..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_02.sp3 +++ /dev/null @@ -1,79 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//write it to GDS -s_mov_b32 s30, s8 -v_lshlrev_b32 v10, 2, v9 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -STORE_LOOP: -ds_write_b32 v10, v0 gds:1 // GPU hang when GPU access the GDS with GFX queue -s_waitcnt 0 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -v_lshlrev_b32 v10, 2, v3 - -LOAD_LOOP: -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 -v_mov_b32 v12, v11 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_address1.sp3 deleted file mode 100644 index 1df833258a..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_address1.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read data from GDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 1 -s_nop 1 -s_nop 1 -ds_read_b32 v11, v10 gds:1 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v11, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_oa_phy.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_oa_phy.sp3 deleted file mode 100644 index 93509f41cf..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_gds_oa_phy.sp3 +++ /dev/null @@ -1,68 +0,0 @@ -shader main - type(CS) - - - user_sgpr_count(4) - tgid_x_en(1) - tgid_y_en(1) - tgid_z_en(1) - - s_getreg_b32 s18, hwreg(HW_REG_HW_ID, 0, 32) - s_bfe_u32 s16, s18, 0x2001e // get meid - s_bfe_u32 s17, s18, 0x20006 // get pipeid - //s_add_u32 s17, s17, s16 - - // get ring id - v_mov_b32 v20, s17 - s_and_b32 s17, s17, 0x7 - - // Get thread_id inside wave - v_mbcnt_lo_u32_b32 v8, 0xffffffff, 0 - v_mbcnt_hi_u32_b32 v9, 0xffffffff, v8 - - s_waitcnt 0 - - // init: gds write address - v_mov_b32 v13, 0 - - // the first 128DW is for ordered-append counter - v_mov_b32 v14, 0x80 - - // offset ring - v_mov_b32 v15, 0x200 - - v_mul_lo_u32 v15, v15, v20 // ring offset - v_mov_b32 v16, 0x40 // wave_size - - v_mul_lo_u32 v18, v1, s1 - v_add_co_u32 v18, vcc, v18, v0 - v_lshrrev_b32 v17,6 ,v18 - s_mov_b32 s9, s12 - s_lshr_b32 s9, s9, 6 - s_and_b32 s9, s9, 0x7ff - s_lshl_b32 s17, s17, 18 - s_or_b32 s9, s9, s17 - s_mov_b32 m0, s9 - - v_mov_b32 v10, 1 - v_mov_b32 v11, 0 - ds_ordered_count v11, v10 gds:1 offset0:0 offset1:1 - s_waitcnt 0 - - v_mov_b32 v18, v11 - - v_mul_lo_u32 v16, v16, v18 // waves offset before. - v_add_co_u32 v13, vcc, v13, v14 - v_add_co_u32 v13, vcc, v13, v15 - v_add_co_u32 v13, vcc, v13, v16 - v_add_co_u32 v13, vcc, v13, v9 - - v_lshlrev_b32 v13,2,v13 - s_mov_b32 m0, 0x4000 - s_nop 0 - ds_write_b32 v13, v0 gds:1 - s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_02.sp3 deleted file mode 100644 index 780e9f9af7..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_02.sp3 +++ /dev/null @@ -1,79 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//store and load s8 times -s_mov_b32 s30, s8 -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 0x1 -s_nop 0x1 -s_nop 0x1 - -STORE_LOOP: -ds_write_b32 v10, v0 -s_waitcnt 0 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -v_lshlrev_b32 v10, 2, v3 - -LOAD_LOOP: -ds_read_b32 v11, v10 -s_waitcnt 0 -v_mov_b32 v12, v11 -v_add_u16 v10, v10, 0x10 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_address1.sp3 deleted file mode 100644 index 09618ba90f..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_lds_address1.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read it from LDS -v_lshlrev_b32 v10, 2, v3 -s_mov_b32 m0, 0xFFFF -s_nop 1 -s_nop 1 -s_nop 1 -ds_read_b32 v0, v10 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read.sp3 deleted file mode 100644 index 4c9f7ec36a..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read.sp3 +++ /dev/null @@ -1,52 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read_tcc_halt.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read_tcc_halt.sp3 deleted file mode 100644 index e13d811bd4..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_mc_read_tcc_halt.sp3 +++ /dev/null @@ -1,77 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -//For vega20, we need to set bit 12 low. This bit will just be set low here in the shader. -//s_mov_b32 s24, 0x15c000 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//store it 10 times -v_mov_b32 v10, v0 -v_mov_b32 v11, v0 -v_mov_b32 v12, v0 -v_mov_b32 v13, v0 -v_mov_b32 v14, v0 -v_mov_b32 v15, v0 -v_mov_b32 v16, v0 -v_mov_b32 v17, v0 -v_mov_b32 v18, v0 -v_mov_b32 v19, v0 - -// read them back -v_mov_b32 v29, v10 -v_mov_b32 v28, v11 -v_mov_b32 v27, v12 -v_mov_b32 v26, v13 -v_mov_b32 v25, v14 -v_mov_b32 v24, v15 -v_mov_b32 v23, v16 -v_mov_b32 v22, v17 -v_mov_b32 v21, v18 -v_mov_b32 v20, v19 - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_no_pollute.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_no_pollute.sp3 deleted file mode 100644 index e1c141b7bd..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_no_pollute.sp3 +++ /dev/null @@ -1,51 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//export poisoned data to L2 -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sgpr_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sgpr_02.sp3 deleted file mode 100644 index 76b575d084..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sgpr_02.sp3 +++ /dev/null @@ -1,55 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//SPI may touch s0...sn before shader is run - -s_mov_b32 s16, s2 - -//write data -s_mov_b32 s30, s0 -s_mov_b32 s31, s1 -s_mov_b32 s32, s2 -s_mov_b32 s33, s3 -s_mov_b32 s34, s4 -s_mov_b32 s35, s5 -s_mov_b32 s36, s6 -s_mov_b32 s37, s7 -s_mov_b32 s38, s8 -s_mov_b32 s39, s9 - -//read back -s_mov_b32 s0, s30 -s_mov_b32 s1, s31 -s_mov_b32 s2, s32 -s_mov_b32 s3, s33 -s_mov_b32 s4, s34 -s_mov_b32 s5, s35 -s_mov_b32 s6, s36 -s_mov_b32 s7, s37 -s_mov_b32 s8, s38 -s_mov_b32 s9, s39 - -s_store_dword s16, s[0:1], 0x0 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sh_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sh_atcl1.sp3 deleted file mode 100644 index 4058f5b7dc..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sh_atcl1.sp3 +++ /dev/null @@ -1,75 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - -s_mov_b32 s30, s8 -s_mov_b32 m0, 0x0 - - -STORE_LOOP: -s_buffer_store_dword s8, s[20:23], m0 glc:1 -s_waitcnt 0 -s_add_u32 m0, m0, 4*1024 // step one 4KB page table address -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -var DEBUG_FUNCTION = 0 -// Remove function check code to half shader run time... -if DEBUG_FUNCTION -s_mov_b32 s8, s30 -s_mov_b32 m0, 0x0 - -LOAD_LOOP: -s_buffer_load_dword s0, s[20:23], m0 glc:1 -s_waitcnt 0 -s_add_u32 m0, m0, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank.sp3 deleted file mode 100644 index fe1b4c2a60..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank.sp3 +++ /dev/null @@ -1,96 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -/* -s_bfe_u32 s33, s8, 0x20004 // extract bank select bits -s_lshl_b32 s33, s33, 6 // ((bank_sel & 0x3) << 6) , bank_sel = address[9:8] ^ address[7:6], if 4 bank enabled -s_and_b32 s8, s8, 0xf -*/ - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - - -s_or_b32 s26, s26, 0x1000 //hack the buffer size to enough - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS -s_mov_b32 m0, 0x0 // BANKA -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0x40 // BANKB -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - -/* -s_mov_b32 m0, 0x80 // BANKC -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0xC0 // BANKD -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 -*/ - -end - -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank_tag.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank_tag.sp3 deleted file mode 100644 index f7df170170..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_data_bank_tag.sp3 +++ /dev/null @@ -1,96 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -/* -s_bfe_u32 s33, s8, 0x20004 // extract bank select bits -s_lshl_b32 s33, s33, 6 // ((bank_sel & 0x3) << 6) , bank_sel = address[9:8] ^ address[7:6], if 4 bank enabled -s_and_b32 s8, s8, 0xf -*/ - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - - -s_or_b32 s26, s26, 0x1000 //hack the buffer size to enough - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS -s_mov_b32 m0, 0x0 // BANKA -s_buffer_store_dword s8, s[24:27], m0 glc:0 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - - -s_mov_b32 m0, 0x40 // BANKB -s_buffer_store_dword s8, s[24:27], m0 glc:0 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - -/* -s_mov_b32 m0, 0x80 // BANKC -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, 0xC0 // BANKD -s_buffer_store_dword s8, s[24:27], m0 glc:1 -s_waitcnt 0 -s_buffer_load_dword s32, s[24:27], m0 glc:1 -s_waitcnt 0 -*/ - -end - -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_dirty_bit.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_dirty_bit.sp3 deleted file mode 100644 index dd766baed3..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_dirty_bit.sp3 +++ /dev/null @@ -1,112 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -s_or_b32 s27, s27, 0x8000000 // changing mtype to non volatile -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -s_mov_b32 s9, 0xaa -s_mov_b32 s10, 0xbb -s_mov_b32 s11, 0xcc - -// BUFFER STORE OFFSETS FOR BANK A AND BANKB -s_mov_b32 s12, 0x0 -s_mov_b32 s13, 0x10 -s_mov_b32 s14, 0x40 -s_mov_b32 s15, 0x50 - - -// The following sequence is needed to inject error in dirty bit ram. Sequence was provided by SQC designer 4/1/2015 -//1. you have an invalid line in data cache, -//2. you write to some of the dwords in that line (the remaining dwords are still invalid), -//3. then there is a read request that hit on that line, but it needs the dwords that are not yet there in that line -//(in other words, it needs some of the invalid dwords of that line), -//4. the request will go to TC, -//5. when TC return comes back, the dirty bit rm will be read - -STORE_LOOP: - -var TOUCH_4_BANKS=1 -if TOUCH_4_BANKS - -s_mov_b32 m0, s13 // BANKA write one dword to tc -s_buffer_store_dwordx2 s[8:9], s[24:27], m0 glc:1 -s_waitcnt 0 - - -s_mov_b32 m0, s12 // BANKA. write one dword to sqc -s_buffer_store_dwordx2 s[10:11], s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s13 // BANK A read the dword that is not in cache -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s15 // BANKB write one dword to tc -s_buffer_store_dwordx2 s[8:9], s[24:27], m0 glc:1 -s_waitcnt 0 - -s_mov_b32 m0, s14 // BANKB write one dword to sqc -s_buffer_store_dwordx2 s[10:11], s[24:27], m0 glc:0 -s_waitcnt 0 - -s_mov_b32 m0, s15 // BANK B read the dword that is not in cache -s_buffer_load_dword s32, s[24:27], m0 glc:0 -s_waitcnt 0 -end - -s_add_u32 s12, s12,0x80 -s_add_u32 s13, s13,0x80 -s_add_u32 s14, s14,0x80 -s_add_u32 s15, s15,0x80 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_dcache_wb // to make emu, sim img match... - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_atcl1.sp3 deleted file mode 100644 index 3d3186d362..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_atcl1.sp3 +++ /dev/null @@ -1,63 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - -label inst_page[34+1] // 34 4k pages - -for var i =0; i < 34; i++ -inst_page[i]: - //each block are 4k side... - s_cbranch_execnz inst_page[i+1] //1 dword - for var j = 0; j < (4*1024)/4 -1; j++ - v_mov_b32 v0, 0 // each with 1 dword - end - -end -inst_page[34]: - - - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank.sp3 deleted file mode 100644 index 64e1084623..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank.sp3 +++ /dev/null @@ -1,69 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -// don't care about the loop count, fix 8 loops -// Totaly number of cacheline equals 2(A,B,)*8 - -var num_cache_lines = 16 -label BLOCK_64B[num_cache_lines] - - -for var loop = 0; loop < num_cache_lines - 1; loop++ -BLOCK_64B[loop]: - s_branch BLOCK_64B[loop+1] // 1DW - for var i = 0; i < 15; i++ - v_nop - end - -end - -// last block -for var i = 0; i < 15; i++ - v_nop -end -//For uei 2 msb and lsb flipped -// s_nop will become v_nop and it will a legal instruction -BLOCK_64B[num_cache_lines-1]: - for var i = 0; i < 81; i++ - s_nop 0x1 - end -s_endpgm -end - -/** comment, four bank interleave -Addr 0x90000000 => Bank A -Addr 0x90000040 => Bank B -Addr 0x90000080 => Bank C -Addr 0x900000c0 => Bank D -Addr 0x90000100 => Bank B -Addr 0x90000140 => Bank A -Addr 0x90000180 => Bank D -Addr 0x900001c0 => Bank C -Addr 0x90000200 => Bank C -Addr 0x90000240 => Bank D -Addr 0x90000280 => Bank A -Addr 0x900002c0 => Bank B -Addr 0x90000300 => Bank D -Addr 0x90000340 => Bank C -Addr 0x90000380 => Bank B - -**/ diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank_snop.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank_snop.sp3 deleted file mode 100644 index ba62535613..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_sqc_inst_bank_snop.sp3 +++ /dev/null @@ -1,29 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - - for var i = 0; i < 1000; i++ - s_nop 0x1 - end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ta_address1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ta_address1.sp3 deleted file mode 100644 index 04e7a3a285..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_ta_address1.sp3 +++ /dev/null @@ -1,51 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read from memory -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -//write the data to memory -buffer_store_dword v0, v9, s24, s7 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02.sp3 deleted file mode 100644 index 46b8b9b0a0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02.sp3 +++ /dev/null @@ -1,73 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -s_mov_b32 s16, 0xa5a50001 -s_store_dword s16, s[0:1], 0x40 glc - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02_ea.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02_ea.sp3 deleted file mode 100644 index a374f8454d..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_02_ea.sp3 +++ /dev/null @@ -1,71 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//For vega20, we need to set bit 12 low to steer traffic to ea0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_02.sp3 deleted file mode 100644 index 70439d9d5c..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_02.sp3 +++ /dev/null @@ -1,345 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x6000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -LOAD_LOOP: - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_03.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_03.sp3 deleted file mode 100644 index bd4c14ba21..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_03.sp3 +++ /dev/null @@ -1,509 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x9000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x9000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -s_mov_b32 s20, 0x1 - -LOAD_LOOP: - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_04.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_04.sp3 deleted file mode 100644 index c93b2992f0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tc_atomic_04.sp3 +++ /dev/null @@ -1,2816 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x9000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x9000 - -//store and load s8 times -s_mov_b32 s30, s8 - -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -s_mov_b32 s20, 0x1 - -LOAD_LOOP: - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - -s_atomic_add s20, s0, 0x100000 -s_atomic_add s20, s0, 0x100010 -s_atomic_add s20, s0, 0x100020 -s_atomic_add s20, s0, 0x100030 -s_atomic_add s20, s0, 0x100040 -s_atomic_add s20, s0, 0x100050 -s_atomic_add s20, s0, 0x100060 -s_atomic_add s20, s0, 0x100070 -s_atomic_add s20, s0, 0x100080 -s_atomic_add s20, s0, 0x100090 - -s_atomic_add s20, s0, 0x100100 -s_atomic_add s20, s0, 0x100110 -s_atomic_add s20, s0, 0x100120 -s_atomic_add s20, s0, 0x100130 -s_atomic_add s20, s0, 0x100140 -s_atomic_add s20, s0, 0x100150 -s_atomic_add s20, s0, 0x100160 -s_atomic_add s20, s0, 0x100170 -s_atomic_add s20, s0, 0x100180 -s_atomic_add s20, s0, 0x100190 - -s_atomic_add s20, s0, 0x100200 -s_atomic_add s20, s0, 0x100210 -s_atomic_add s20, s0, 0x100220 -s_atomic_add s20, s0, 0x100230 -s_atomic_add s20, s0, 0x100240 -s_atomic_add s20, s0, 0x100250 -s_atomic_add s20, s0, 0x100260 -s_atomic_add s20, s0, 0x100270 -s_atomic_add s20, s0, 0x100280 -s_atomic_add s20, s0, 0x100290 - -s_atomic_add s20, s0, 0x100300 -s_atomic_add s20, s0, 0x100310 -s_atomic_add s20, s0, 0x100320 -s_atomic_add s20, s0, 0x100330 -s_atomic_add s20, s0, 0x100340 -s_atomic_add s20, s0, 0x100350 -s_atomic_add s20, s0, 0x100360 -s_atomic_add s20, s0, 0x100370 -s_atomic_add s20, s0, 0x100380 -s_atomic_add s20, s0, 0x100390 - -s_atomic_add s20, s0, 0x100400 -s_atomic_add s20, s0, 0x100404 -s_atomic_add s20, s0, 0x100408 -s_atomic_add s20, s0, 0x10040c -s_atomic_add s20, s0, 0x100410 -s_atomic_add s20, s0, 0x100414 -s_atomic_add s20, s0, 0x100418 -s_atomic_add s20, s0, 0x10041c -s_atomic_add s20, s0, 0x100420 -s_atomic_add s20, s0, 0x100424 -s_atomic_add s20, s0, 0x100428 -s_atomic_add s20, s0, 0x10042c - -s_atomic_add s20, s0, 0x100500 -s_atomic_add s20, s0, 0x100504 -s_atomic_add s20, s0, 0x100508 -s_atomic_add s20, s0, 0x10050c -s_atomic_add s20, s0, 0x100510 -s_atomic_add s20, s0, 0x100514 -s_atomic_add s20, s0, 0x100518 -s_atomic_add s20, s0, 0x10051c -s_atomic_add s20, s0, 0x100520 -s_atomic_add s20, s0, 0x100524 -s_atomic_add s20, s0, 0x100528 -s_atomic_add s20, s0, 0x10052c - -s_atomic_add s20, s0, 0x100600 -s_atomic_add s20, s0, 0x100604 -s_atomic_add s20, s0, 0x100608 -s_atomic_add s20, s0, 0x10060c -s_atomic_add s20, s0, 0x100610 -s_atomic_add s20, s0, 0x100614 -s_atomic_add s20, s0, 0x100618 -s_atomic_add s20, s0, 0x10061c -s_atomic_add s20, s0, 0x100620 -s_atomic_add s20, s0, 0x100624 -s_atomic_add s20, s0, 0x100628 -s_atomic_add s20, s0, 0x10062c - -s_atomic_add s20, s0, 0x100700 -s_atomic_add s20, s0, 0x100704 -s_atomic_add s20, s0, 0x100708 -s_atomic_add s20, s0, 0x10070c -s_atomic_add s20, s0, 0x100710 -s_atomic_add s20, s0, 0x100714 -s_atomic_add s20, s0, 0x100718 -s_atomic_add s20, s0, 0x10071c -s_atomic_add s20, s0, 0x100720 -s_atomic_add s20, s0, 0x100724 -s_atomic_add s20, s0, 0x100728 -s_atomic_add s20, s0, 0x10072c - -s_atomic_add s20, s0, 0x100800 -s_atomic_add s20, s0, 0x100804 -s_atomic_add s20, s0, 0x100808 -s_atomic_add s20, s0, 0x10080c -s_atomic_add s20, s0, 0x100810 -s_atomic_add s20, s0, 0x100814 -s_atomic_add s20, s0, 0x100818 -s_atomic_add s20, s0, 0x10081c -s_atomic_add s20, s0, 0x100820 -s_atomic_add s20, s0, 0x100824 -s_atomic_add s20, s0, 0x100828 -s_atomic_add s20, s0, 0x10082c - -s_atomic_add s20, s0, 0x100900 -s_atomic_add s20, s0, 0x100904 -s_atomic_add s20, s0, 0x100908 -s_atomic_add s20, s0, 0x10090c -s_atomic_add s20, s0, 0x100910 -s_atomic_add s20, s0, 0x100914 -s_atomic_add s20, s0, 0x100918 -s_atomic_add s20, s0, 0x10091c -s_atomic_add s20, s0, 0x100920 -s_atomic_add s20, s0, 0x100924 -s_atomic_add s20, s0, 0x100928 -s_atomic_add s20, s0, 0x10092c - -s_atomic_add s20, s0, 0x100a00 -s_atomic_add s20, s0, 0x100a04 -s_atomic_add s20, s0, 0x100a08 -s_atomic_add s20, s0, 0x100a0c -s_atomic_add s20, s0, 0x100a10 -s_atomic_add s20, s0, 0x100a14 -s_atomic_add s20, s0, 0x100a18 -s_atomic_add s20, s0, 0x100a1c -s_atomic_add s20, s0, 0x100a20 -s_atomic_add s20, s0, 0x100a24 -s_atomic_add s20, s0, 0x100a28 -s_atomic_add s20, s0, 0x100a2c - -s_atomic_add s20, s0, 0x100b00 -s_atomic_add s20, s0, 0x100b04 -s_atomic_add s20, s0, 0x100b08 -s_atomic_add s20, s0, 0x100b0c -s_atomic_add s20, s0, 0x100b10 -s_atomic_add s20, s0, 0x100b14 -s_atomic_add s20, s0, 0x100b18 -s_atomic_add s20, s0, 0x100b1c -s_atomic_add s20, s0, 0x100b20 -s_atomic_add s20, s0, 0x100b24 -s_atomic_add s20, s0, 0x100b28 -s_atomic_add s20, s0, 0x100b2c - -s_atomic_add s20, s0, 0x100c00 -s_atomic_add s20, s0, 0x100c04 -s_atomic_add s20, s0, 0x100c08 -s_atomic_add s20, s0, 0x100c0c -s_atomic_add s20, s0, 0x100c10 -s_atomic_add s20, s0, 0x100c14 -s_atomic_add s20, s0, 0x100c18 -s_atomic_add s20, s0, 0x100c1c -s_atomic_add s20, s0, 0x100c20 -s_atomic_add s20, s0, 0x100c24 -s_atomic_add s20, s0, 0x100c28 -s_atomic_add s20, s0, 0x100c2c - -s_atomic_add s20, s0, 0x101000 -s_atomic_add s20, s0, 0x101010 -s_atomic_add s20, s0, 0x101020 -s_atomic_add s20, s0, 0x101030 -s_atomic_add s20, s0, 0x101040 -s_atomic_add s20, s0, 0x101050 -s_atomic_add s20, s0, 0x101060 -s_atomic_add s20, s0, 0x101070 -s_atomic_add s20, s0, 0x101080 -s_atomic_add s20, s0, 0x101090 - -s_atomic_add s20, s0, 0x101100 -s_atomic_add s20, s0, 0x101110 -s_atomic_add s20, s0, 0x101120 -s_atomic_add s20, s0, 0x101130 -s_atomic_add s20, s0, 0x101140 -s_atomic_add s20, s0, 0x101150 -s_atomic_add s20, s0, 0x101160 -s_atomic_add s20, s0, 0x101170 -s_atomic_add s20, s0, 0x101180 -s_atomic_add s20, s0, 0x101190 - -s_atomic_add s20, s0, 0x101200 -s_atomic_add s20, s0, 0x101210 -s_atomic_add s20, s0, 0x101220 -s_atomic_add s20, s0, 0x101230 -s_atomic_add s20, s0, 0x101240 -s_atomic_add s20, s0, 0x101250 -s_atomic_add s20, s0, 0x101260 -s_atomic_add s20, s0, 0x101270 -s_atomic_add s20, s0, 0x101280 -s_atomic_add s20, s0, 0x101290 - -s_atomic_add s20, s0, 0x101300 -s_atomic_add s20, s0, 0x101310 -s_atomic_add s20, s0, 0x101320 -s_atomic_add s20, s0, 0x101330 -s_atomic_add s20, s0, 0x101340 -s_atomic_add s20, s0, 0x101350 -s_atomic_add s20, s0, 0x101360 -s_atomic_add s20, s0, 0x101370 -s_atomic_add s20, s0, 0x101380 -s_atomic_add s20, s0, 0x101390 - -s_atomic_add s20, s0, 0x101400 -s_atomic_add s20, s0, 0x101404 -s_atomic_add s20, s0, 0x101408 -s_atomic_add s20, s0, 0x10140c -s_atomic_add s20, s0, 0x101410 -s_atomic_add s20, s0, 0x101414 -s_atomic_add s20, s0, 0x101418 -s_atomic_add s20, s0, 0x10141c -s_atomic_add s20, s0, 0x101420 -s_atomic_add s20, s0, 0x101424 -s_atomic_add s20, s0, 0x101428 -s_atomic_add s20, s0, 0x10142c - -s_atomic_add s20, s0, 0x101500 -s_atomic_add s20, s0, 0x101504 -s_atomic_add s20, s0, 0x101508 -s_atomic_add s20, s0, 0x10150c -s_atomic_add s20, s0, 0x101510 -s_atomic_add s20, s0, 0x101514 -s_atomic_add s20, s0, 0x101518 -s_atomic_add s20, s0, 0x10151c -s_atomic_add s20, s0, 0x101520 -s_atomic_add s20, s0, 0x101524 -s_atomic_add s20, s0, 0x101528 -s_atomic_add s20, s0, 0x10152c - -s_atomic_add s20, s0, 0x101600 -s_atomic_add s20, s0, 0x101604 -s_atomic_add s20, s0, 0x101608 -s_atomic_add s20, s0, 0x10160c -s_atomic_add s20, s0, 0x101610 -s_atomic_add s20, s0, 0x101614 -s_atomic_add s20, s0, 0x101618 -s_atomic_add s20, s0, 0x10161c -s_atomic_add s20, s0, 0x101620 -s_atomic_add s20, s0, 0x101624 -s_atomic_add s20, s0, 0x101628 -s_atomic_add s20, s0, 0x10162c - -s_atomic_add s20, s0, 0x101700 -s_atomic_add s20, s0, 0x101704 -s_atomic_add s20, s0, 0x101708 -s_atomic_add s20, s0, 0x10170c -s_atomic_add s20, s0, 0x101710 -s_atomic_add s20, s0, 0x101714 -s_atomic_add s20, s0, 0x101718 -s_atomic_add s20, s0, 0x10171c -s_atomic_add s20, s0, 0x101720 -s_atomic_add s20, s0, 0x101724 -s_atomic_add s20, s0, 0x101728 -s_atomic_add s20, s0, 0x10172c - -s_atomic_add s20, s0, 0x101800 -s_atomic_add s20, s0, 0x101804 -s_atomic_add s20, s0, 0x101808 -s_atomic_add s20, s0, 0x10180c -s_atomic_add s20, s0, 0x101810 -s_atomic_add s20, s0, 0x101814 -s_atomic_add s20, s0, 0x101818 -s_atomic_add s20, s0, 0x10181c -s_atomic_add s20, s0, 0x101820 -s_atomic_add s20, s0, 0x101824 -s_atomic_add s20, s0, 0x101828 -s_atomic_add s20, s0, 0x10182c - -s_atomic_add s20, s0, 0x101900 -s_atomic_add s20, s0, 0x101904 -s_atomic_add s20, s0, 0x101908 -s_atomic_add s20, s0, 0x10190c -s_atomic_add s20, s0, 0x101910 -s_atomic_add s20, s0, 0x101914 -s_atomic_add s20, s0, 0x101918 -s_atomic_add s20, s0, 0x10191c -s_atomic_add s20, s0, 0x101920 -s_atomic_add s20, s0, 0x101924 -s_atomic_add s20, s0, 0x101928 -s_atomic_add s20, s0, 0x10192c - -s_atomic_add s20, s0, 0x101a00 -s_atomic_add s20, s0, 0x101a04 -s_atomic_add s20, s0, 0x101a08 -s_atomic_add s20, s0, 0x101a0c -s_atomic_add s20, s0, 0x101a10 -s_atomic_add s20, s0, 0x101a14 -s_atomic_add s20, s0, 0x101a18 -s_atomic_add s20, s0, 0x101a1c -s_atomic_add s20, s0, 0x101a20 -s_atomic_add s20, s0, 0x101a24 -s_atomic_add s20, s0, 0x101a28 -s_atomic_add s20, s0, 0x101a2c - -s_atomic_add s20, s0, 0x101b00 -s_atomic_add s20, s0, 0x101b04 -s_atomic_add s20, s0, 0x101b08 -s_atomic_add s20, s0, 0x101b0c -s_atomic_add s20, s0, 0x101b10 -s_atomic_add s20, s0, 0x101b14 -s_atomic_add s20, s0, 0x101b18 -s_atomic_add s20, s0, 0x101b1c -s_atomic_add s20, s0, 0x101b20 -s_atomic_add s20, s0, 0x101b24 -s_atomic_add s20, s0, 0x101b28 -s_atomic_add s20, s0, 0x101b2c - -s_atomic_add s20, s0, 0x101c00 -s_atomic_add s20, s0, 0x101c04 -s_atomic_add s20, s0, 0x101c08 -s_atomic_add s20, s0, 0x101c0c -s_atomic_add s20, s0, 0x101c10 -s_atomic_add s20, s0, 0x101c14 -s_atomic_add s20, s0, 0x101c18 -s_atomic_add s20, s0, 0x101c1c -s_atomic_add s20, s0, 0x101c20 -s_atomic_add s20, s0, 0x101c24 -s_atomic_add s20, s0, 0x101c28 -s_atomic_add s20, s0, 0x101c2c - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcc_return_control.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcc_return_control.sp3 deleted file mode 100644 index 99be574f61..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcc_return_control.sp3 +++ /dev/null @@ -1,1019 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//set bit 12 low to select EA0 -s_mov_b32 s32, 0xFFFFEFFF -s_and_b32 s24, s24, s32 - -s_and_b32 s31, s9, 0x1 -s_cmpk_eq_i32 s31, 0x1 -s_cbranch_scc1 ODD_WAVES - -//set bit 12 high to select EA1 -s_mov_b32 s32, 0x1000 -s_or_b32 s24, s24, s32 - -ODD_WAVES: - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -v_mul_i32_i24 v3, v3, 0x10 -v_mul_i32_i24 v9, v9, 0x10 - -s_mov_b32 s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 - -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 -buffer_store_dwordx4 v0, v9, s24, s31 offen:1 -s_add_i32 s31, s31, 0x6000 - -s_barrier - -s_mov_b32 s31, 0xF0000 -s_mov_b32 s32, 0x6000 - -//store and load s8 times -s_mov_b32 s30, s8 - -//waves with the least 2 tgid (i.e. tgid0 and tgid1) will do atomic operations -//while the rest of waves will do load operations -s_cmpk_lt_i32 s9, 0x2 -s_cbranch_scc1 ATOMIC_LOOP - -LOAD_LOOP: - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -buffer_load_dwordx4 v4, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v8, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v12, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v16, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v20, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v24, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v28, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v32, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v36, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 -buffer_load_dwordx4 v40, v3, s24, s31 offen:1 -s_add_i32 s31, s31, 0x4000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 LOAD_LOOP - - -s_cmpk_ge_i32 s9, 0x2 -s_cbranch_scc1 END - -ATOMIC_LOOP: - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 -buffer_atomic_add_x2 v0, v3, s24, s32 offen:1 glc:1 -s_add_i32 s32, s32, 0x2000 - -s_sub_u32 s30, s30, 1 -s_cmpk_eq_u32 s30, 0 -s_cbranch_scc0 ATOMIC_LOOP - -//s_waitcnt 0 - -END: -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_atcl1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_atcl1.sp3 deleted file mode 100644 index 93d27c8d80..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_atcl1.sp3 +++ /dev/null @@ -1,80 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - - -//store and load s8 times -s_mov_b32 s8, 33 // store 33 times to overflow atcl1 cache... -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -v_add_co_u32 v0, vcc[0:1], v0, 2 -buffer_store_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -s_add_u32 s31, s31, 4*1024 // step one 4KB page size -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - - - -var DEBUG_FUNCTION = 0 -//remove code to half shader run time -if DEBUG_FUNCTION -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_utcl1_fifo1.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_utcl1_fifo1.sp3 deleted file mode 100644 index ac9744f68c..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_tcp_utcl1_fifo1.sp3 +++ /dev/null @@ -1,80 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_load_dwordx4 s[20:23], s[0:1], 16 // load atc mem surface rsrc -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -var MTYPE_UC = 0x38000000 -s_or_b32 s27, s27, MTYPE_UC - - -//store and load s8 times -s_mov_b32 s8, 33 // store 33 times to overflow atcl1 cache... -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -v_add_co_u32 v0, vcc[0:1], v0, 2 -buffer_store_dword v0, v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -s_add_u32 s31, s31, 4*1024 // step one 4KB page size -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - - - -var DEBUG_FUNCTION = 1 -//remove code to half shader run time -if DEBUG_FUNCTION -s_mov_b32 s8, 0x20 -s_mov_b32 s31, 0xffc - -LOAD_LOOP: -buffer_load_dwordx2 v[0:1], v9, s20, s31 idxen:1 glc:1 slc:1 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 4*1024 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP -end - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_02.sp3 deleted file mode 100644 index 9c66b37275..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_02.sp3 +++ /dev/null @@ -1,72 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 -//bump up the addresses being accessed to generate multiple reads to the pde memories -v_mul_u32_u24 v9, 65536, v9 -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -//Hack number of records to avoid range checking which we don't want since we want to generate -//out of range accesses. we are really trying to generate many reads to the PDEs to get FUE. -s_mov_b32 s26, 0xffffffff - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_03.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_03.sp3 deleted file mode 100644 index d4d53d09a0..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_utc_vmwalker_pde_03.sp3 +++ /dev/null @@ -1,72 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 -//bump up the addresses being accessed to generate multiple reads to the pde memories -v_mul_u32_u24 v9, 4096, v9 -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -//Hack number of records to avoid range checking which we don't want since we want to generate -//out of range accesses. we are really trying to generate many reads to the PDEs to get FUE. -s_mov_b32 s26, 0xffffffff - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_mov_b32 s8, s30 -s_mov_b32 s31, 0x0 - -LOAD_LOOP: -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -v_mov_b32 v12, v0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 LOAD_LOOP - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr.sp3 deleted file mode 100644 index 138e13eded..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr.sp3 +++ /dev/null @@ -1,47 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(8) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset - -tgid_x_en(1) //s_tgid_x s8 -tgid_y_en(1) //s_tgid_y s9 -tgid_z_en(1) //s_tgid_z s10 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//read mem data -s_mov_b32 s31, 0x0 -buffer_load_dword v0, v9, s24, s31 idxen:1 glc:1 -s_waitcnt 0 - -s_endpgm -end - diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_01.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_01.sp3 deleted file mode 100644 index 6d3ed3f9db..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_01.sp3 +++ /dev/null @@ -1,54 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -//fetch the buffer resource through SQC -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -// v3 thread_id_in_group = (tid_z *x*y) + (tid_y*x) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 -v_mad_u32_u24 v3, v2, s3, v3 - -//s28 thread_group_id = (tgid_z*X*Y) + (tgid_y*X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 -s_add_i32 s28, s28, s_tgid_x -s_mul_i32 s29, s6, s_tgid_z -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id *(x*y*z) + thread_id_in_group -v_mov_b32 v9, s28 -v_mad_u32_u24 v9, v9, s4, v3 - -//store and load s8 times -s_mov_b32 s30, s8 -s_mov_b32 s31, 0x0 - -STORE_LOOP: -buffer_store_dword v0, v9, s24, s31 idxen:1 glc:0 -s_waitcnt 0 -s_add_u32 s31, s31, 0x4 -s_sub_u32 s8, s8, 1 -s_cmpk_eq_u32 s8, 0 -s_cbranch_scc0 STORE_LOOP - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_02.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_02.sp3 deleted file mode 100644 index 3228e2377d..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_edc_vgpr_02.sp3 +++ /dev/null @@ -1,54 +0,0 @@ -shader main -type(CS) - -user_sgpr_count(9) // 2 for the buffer resource + 5 for thread/thread group parameters - -//s[0:1] the mmeory address for the buffer resource -//s2 x -//s3 x*y -//s4 x*y*z -//s5 X -//s6 X*Y -//s7 output offset -//s8 loop - -tgid_x_en(1) //s_tgid_x s9 -tgid_y_en(1) //s_tgid_y s10 -tgid_z_en(1) //s_tgid_z s11 - -//vo for tid_x -//v1 for tid_y -//v2 for tid_z - -s_mov_b32 s16, s2 - -//SPI may touch v0,v1,v2 before shader is run - -//store it 10 times -v_mov_b32 v10, v1 -v_mov_b32 v11, v2 -v_mov_b32 v12, v1 -v_mov_b32 v13, v2 -v_mov_b32 v14, v1 -v_mov_b32 v15, v2 -v_mov_b32 v16, v1 -v_mov_b32 v17, v2 -v_mov_b32 v18, v1 -v_mov_b32 v19, v0 - -// read them back -v_mov_b32 v29, v10 -v_mov_b32 v28, v11 -v_mov_b32 v27, v12 -v_mov_b32 v26, v13 -v_mov_b32 v25, v14 -v_mov_b32 v24, v15 -v_mov_b32 v23, v16 -v_mov_b32 v22, v17 -v_mov_b32 v21, v18 -v_mov_b32 v20, v19 - -s_store_dword s16, s[0:1], 0x0 glc - -s_endpgm -end diff --git a/ras_prebuild/sp3/gfx9/edc/vega20/gc_wf_lifetime_cs_pm4_01_cs.sp3 b/ras_prebuild/sp3/gfx9/edc/vega20/gc_wf_lifetime_cs_pm4_01_cs.sp3 deleted file mode 100644 index 9069afdb3e..0000000000 --- a/ras_prebuild/sp3/gfx9/edc/vega20/gc_wf_lifetime_cs_pm4_01_cs.sp3 +++ /dev/null @@ -1,58 +0,0 @@ -//s[0:1]: buffer resource -//s2: num_threads_x_full -//s3: num_threads_x_full * num_threads_y_full -//s4: num_threads_x_full * num_threads_y_full * num_threads_z_full -//s5: COMPUTE_DIM_X -//s6: COMPUTE_DIM_X * COMPUTE_DIM_Y -//s7: loop_lifetime -//s8: dispatch_offset -//s[9:11]: thread group ID -//v[0:2]: thread ID - -shader main - -type(CS) -user_sgpr_count(9) -tgid_x_en(1) -tgid_y_en(1) -tgid_z_en(1) - -//sp3 loop for lifetime -s_mov_b32 s12, 0 //init loop idx s12 -label_0004: -s_cmp_lt_i32 s12, s7 //scc = (s12 < s7) ? 1 : 0 -s_cbranch_scc0 label_0006 //if(scc == 0) then jump to label_0006; else nop - -v_mov_b32 v4,s12 -s_add_i32 s12, s12, 1 //add loop incr -s_branch label_0004 - -label_0006: //end of SP3 loop - -//v3 thread_id_in_group = (tid_z * num_threads_x_full * num_threads_y_full) + (tid_y * num_threads_x_full) + tid_x -v_mad_u32_u24 v3, v1, s2, v0 //v3 = tid_y * num_threads_x_full + tid_x -v_mad_u32_u24 v3, v2, s3, v3 //v3 = tid_z * num_threads_x_ful * num_threads_y_full + v3 - -//s28 thread_group_id = (tgid_z * COMPUTE_DIM_X * COMPUTE_DIM_Y) + (tgid_y * COMPUTE_DIM_X) + tgid_x -s_mul_i32 s28, s_tgid_y, s5 //tgid_y * COMPUTE_DIM_X -s_add_i32 s28, s28, s_tgid_x //tgid_y * COMPUTE_DIM_X + tgid_x -s_mul_i32 s29, s6, s_tgid_z //tgid_z * COMPUTE_DIM_X * COMPUTE_DIM_Y -s_add_i32 s28, s29, s28 - -//v9 absolute thread id = thread_group_id * (num_threads_x_full * num_threads_y_full * num_threads_z_full) + thread_id_in_group -v_mov_b32 v9, s28 //thread_group_id -v_mad_u32_u24 v9, v9, s4, v3 - -//fetch the buffer resource -s_load_dwordx4 s[24:27], s[0:1], 0x0 -s_waitcnt 0 - -//write absolute thread id using it as an index -buffer_store_dword v9, v9, s24, s8 idxen:1 -s_waitcnt 0 - -s_mov_b32 s16, 0xa5a50000 -s_store_dword s16, s[0:1], 0x40 glc - -s_endpgm -end diff --git a/rdc_libs/rdc/CMakeLists.txt b/rdc_libs/rdc/CMakeLists.txt index c20ebec7d1..7b75656948 100644 --- a/rdc_libs/rdc/CMakeLists.txt +++ b/rdc_libs/rdc/CMakeLists.txt @@ -18,7 +18,6 @@ set(RDC_LIB_SRC_LIST ${RDC_LIB_SRC_LIST} "${SRC_DIR}/RdcModuleMgrImpl.cc" "${SRC_DIR}/RdcNotificationImpl.cc" "${SRC_DIR}/RdcPerfTimer.cc" - "${SRC_DIR}/RdcRasLib.cc" "${SRC_DIR}/RdcRocpLib.cc" "${SRC_DIR}/RdcRocrLib.cc" "${SRC_DIR}/RdcRVSLib.cc" @@ -51,7 +50,6 @@ set(RDC_LIB_INC_LIST ${RDC_LIB_INC_LIST} "${INC_DIR}/impl/RdcMetricsUpdaterImpl.h" "${INC_DIR}/impl/RdcModuleMgrImpl.h" "${INC_DIR}/impl/RdcNotificationImpl.h" - "${INC_DIR}/impl/RdcRasLib.h" "${INC_DIR}/impl/RdcRocpLib.h" "${INC_DIR}/impl/RdcRocrLib.h" "${INC_DIR}/impl/RdcRVSLib.h" diff --git a/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc b/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc index cbb4d39d78..a0ff671de7 100644 --- a/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc +++ b/rdc_libs/rdc/src/RdcMetricFetcherImpl.cc @@ -91,7 +91,116 @@ uint64_t RdcMetricFetcherImpl::now() { return static_cast(tv.tv_sec) * 1000 + tv.tv_usec / 1000; } -void RdcMetricFetcherImpl::get_ecc_error(uint32_t gpu_index, rdc_field_t field_id, +void RdcMetricFetcherImpl::get_ecc(uint32_t gpu_index, rdc_field_t field_id, + rdc_field_value* value) { + amdsmi_status_t err = AMDSMI_STATUS_SUCCESS; + amdsmi_ras_err_state_t err_state; + + amdsmi_processor_handle processor_handle; + err = get_processor_handle_from_id(gpu_index, &processor_handle); + + // because RDC already had an established order that is different from amd-smi : map blocks to + // fields manually + auto field_to_block_ = [](rdc_field_t field) -> amdsmi_gpu_block_t { + switch (field) { + case RDC_FI_ECC_SDMA_CE: + case RDC_FI_ECC_SDMA_UE: + return AMDSMI_GPU_BLOCK_SDMA; + case RDC_FI_ECC_GFX_CE: + case RDC_FI_ECC_GFX_UE: + return AMDSMI_GPU_BLOCK_GFX; + case RDC_FI_ECC_MMHUB_CE: + case RDC_FI_ECC_MMHUB_UE: + return AMDSMI_GPU_BLOCK_MMHUB; + case RDC_FI_ECC_ATHUB_CE: + case RDC_FI_ECC_ATHUB_UE: + return AMDSMI_GPU_BLOCK_ATHUB; + case RDC_FI_ECC_PCIE_BIF_CE: + case RDC_FI_ECC_PCIE_BIF_UE: + return AMDSMI_GPU_BLOCK_PCIE_BIF; + case RDC_FI_ECC_HDP_CE: + case RDC_FI_ECC_HDP_UE: + return AMDSMI_GPU_BLOCK_HDP; + case RDC_FI_ECC_XGMI_WAFL_CE: + case RDC_FI_ECC_XGMI_WAFL_UE: + return AMDSMI_GPU_BLOCK_XGMI_WAFL; + case RDC_FI_ECC_DF_CE: + case RDC_FI_ECC_DF_UE: + return AMDSMI_GPU_BLOCK_DF; + case RDC_FI_ECC_SMN_CE: + case RDC_FI_ECC_SMN_UE: + return AMDSMI_GPU_BLOCK_SMN; + case RDC_FI_ECC_SEM_CE: + case RDC_FI_ECC_SEM_UE: + return AMDSMI_GPU_BLOCK_SEM; + case RDC_FI_ECC_MP0_CE: + case RDC_FI_ECC_MP0_UE: + return AMDSMI_GPU_BLOCK_MP0; + case RDC_FI_ECC_MP1_CE: + case RDC_FI_ECC_MP1_UE: + return AMDSMI_GPU_BLOCK_MP1; + case RDC_FI_ECC_FUSE_CE: + case RDC_FI_ECC_FUSE_UE: + return AMDSMI_GPU_BLOCK_FUSE; + case RDC_FI_ECC_UMC_CE: + case RDC_FI_ECC_UMC_UE: + return AMDSMI_GPU_BLOCK_UMC; + case RDC_FI_ECC_MCA_CE: + case RDC_FI_ECC_MCA_UE: + return AMDSMI_GPU_BLOCK_MCA; + case RDC_FI_ECC_VCN_CE: + case RDC_FI_ECC_VCN_UE: + return AMDSMI_GPU_BLOCK_VCN; + case RDC_FI_ECC_JPEG_CE: + case RDC_FI_ECC_JPEG_UE: + return AMDSMI_GPU_BLOCK_JPEG; + case RDC_FI_ECC_IH_CE: + case RDC_FI_ECC_IH_UE: + return AMDSMI_GPU_BLOCK_IH; + case RDC_FI_ECC_MPIO_CE: + case RDC_FI_ECC_MPIO_UE: + return AMDSMI_GPU_BLOCK_MPIO; + default: + return AMDSMI_GPU_BLOCK_INVALID; + } + }; + + const bool is_correctable = (field_id % 2 == 0); + + if (!value) { + return; + } + + auto gpu_block = field_to_block_(field_id); + if (gpu_block == AMDSMI_GPU_BLOCK_INVALID) { + value->status = AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS; + } + + err = amdsmi_get_gpu_ecc_status(processor_handle, gpu_block, &err_state); + if (err != AMDSMI_STATUS_SUCCESS) { + RDC_LOG(RDC_INFO, "Error in ecc status [" << gpu_block << "]:" << err); + value->status = err; + return; + } + + amdsmi_error_count_t ec; + err = amdsmi_get_gpu_ecc_count(processor_handle, gpu_block, &ec); + if (err != AMDSMI_STATUS_SUCCESS) { + RDC_LOG(RDC_ERROR, "Error in ecc count [" << gpu_block << "]:" << err); + value->status = err; + return; + } + + value->status = AMDSMI_STATUS_SUCCESS; + value->type = INTEGER; + if (is_correctable) { + value->value.l_int = ec.correctable_count; + } else { + value->value.l_int = ec.uncorrectable_count; + } +} + +void RdcMetricFetcherImpl::get_ecc_total(uint32_t gpu_index, rdc_field_t field_id, rdc_field_value* value) { amdsmi_status_t err = AMDSMI_STATUS_SUCCESS; uint64_t correctable_count = 0; @@ -516,7 +625,47 @@ rdc_status_t RdcMetricFetcherImpl::fetch_smi_field(uint32_t gpu_index, rdc_field } case RDC_FI_ECC_CORRECT_TOTAL: case RDC_FI_ECC_UNCORRECT_TOTAL: - get_ecc_error(gpu_index, field_id, value); + get_ecc_total(gpu_index, field_id, value); + break; + case RDC_FI_ECC_SDMA_CE: + case RDC_FI_ECC_SDMA_UE: + case RDC_FI_ECC_GFX_CE: + case RDC_FI_ECC_GFX_UE: + case RDC_FI_ECC_MMHUB_CE: + case RDC_FI_ECC_MMHUB_UE: + case RDC_FI_ECC_ATHUB_CE: + case RDC_FI_ECC_ATHUB_UE: + case RDC_FI_ECC_PCIE_BIF_CE: + case RDC_FI_ECC_PCIE_BIF_UE: + case RDC_FI_ECC_HDP_CE: + case RDC_FI_ECC_HDP_UE: + case RDC_FI_ECC_XGMI_WAFL_CE: + case RDC_FI_ECC_XGMI_WAFL_UE: + case RDC_FI_ECC_DF_CE: + case RDC_FI_ECC_DF_UE: + case RDC_FI_ECC_SMN_CE: + case RDC_FI_ECC_SMN_UE: + case RDC_FI_ECC_SEM_CE: + case RDC_FI_ECC_SEM_UE: + case RDC_FI_ECC_MP0_CE: + case RDC_FI_ECC_MP0_UE: + case RDC_FI_ECC_MP1_CE: + case RDC_FI_ECC_MP1_UE: + case RDC_FI_ECC_FUSE_CE: + case RDC_FI_ECC_FUSE_UE: + case RDC_FI_ECC_UMC_CE: + case RDC_FI_ECC_UMC_UE: + case RDC_FI_ECC_MCA_CE: + case RDC_FI_ECC_MCA_UE: + case RDC_FI_ECC_VCN_CE: + case RDC_FI_ECC_VCN_UE: + case RDC_FI_ECC_JPEG_CE: + case RDC_FI_ECC_JPEG_UE: + case RDC_FI_ECC_IH_CE: + case RDC_FI_ECC_IH_UE: + case RDC_FI_ECC_MPIO_CE: + case RDC_FI_ECC_MPIO_UE: + get_ecc(gpu_index, field_id, value); break; case RDC_FI_PCIE_TX: case RDC_FI_PCIE_RX: diff --git a/rdc_libs/rdc/src/RdcModuleMgrImpl.cc b/rdc_libs/rdc/src/RdcModuleMgrImpl.cc index 6a1cf84c7b..9019d2ab39 100644 --- a/rdc_libs/rdc/src/RdcModuleMgrImpl.cc +++ b/rdc_libs/rdc/src/RdcModuleMgrImpl.cc @@ -30,7 +30,6 @@ THE SOFTWARE. #include "rdc_lib/RdcTelemetry.h" #include "rdc_lib/impl/RdcDiagnosticModule.h" #include "rdc_lib/impl/RdcRVSLib.h" -#include "rdc_lib/impl/RdcRasLib.h" #include "rdc_lib/impl/RdcRocpLib.h" #include "rdc_lib/impl/RdcRocrLib.h" #include "rdc_lib/impl/RdcSmiLib.h" @@ -89,7 +88,7 @@ RdcModuleMgrImpl::RdcModuleMgrImpl(const RdcMetricFetcherPtr& fetcher) : fetcher } // all other modules get initialized by insert_modules - insert_modules(); + insert_modules(); } RdcTelemetryPtr RdcModuleMgrImpl::get_telemetry_module() { diff --git a/rdc_libs/rdc/src/RdcRasLib.cc b/rdc_libs/rdc/src/RdcRasLib.cc deleted file mode 100644 index ff1b2f54f6..0000000000 --- a/rdc_libs/rdc/src/RdcRasLib.cc +++ /dev/null @@ -1,178 +0,0 @@ -/* -Copyright (c) 2020 - present Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ -#include "rdc_lib/impl/RdcRasLib.h" - -namespace amd { -namespace rdc { - -RdcRasLib::RdcRasLib() - : fields_value_get_(nullptr), - fields_query_(nullptr), - fields_watch_(nullptr), - fields_unwatch_(nullptr), - rdc_module_init_(nullptr), - rdc_module_destroy_(nullptr) { - rdc_status_t status = lib_loader_.load("librdc_ras.so"); - if (status != RDC_ST_OK) { - RDC_LOG(RDC_ERROR, "RAS related function will not work."); - return; - } - - status = lib_loader_.load_symbol(&rdc_module_init_, "rdc_module_init"); - if (status != RDC_ST_OK) { - rdc_module_init_ = nullptr; - return; - } - - status = rdc_module_init_(0); - if (status != RDC_ST_OK) { - RDC_LOG(RDC_ERROR, "Fail to init librdc_ras.so:" << rdc_status_string(status) - << ". RAS related function will not work."); - return; - } - - status = lib_loader_.load_symbol(&rdc_module_destroy_, "rdc_module_destroy"); - if (status != RDC_ST_OK) { - rdc_module_destroy_ = nullptr; - } - - status = lib_loader_.load_symbol(&fields_value_get_, "rdc_telemetry_fields_value_get"); - if (status != RDC_ST_OK) { - fields_value_get_ = nullptr; - } - status = lib_loader_.load_symbol(&fields_query_, "rdc_telemetry_fields_query"); - if (status != RDC_ST_OK) { - fields_query_ = nullptr; - } - status = lib_loader_.load_symbol(&fields_watch_, "rdc_telemetry_fields_watch"); - if (status != RDC_ST_OK) { - fields_watch_ = nullptr; - } - status = lib_loader_.load_symbol(&fields_unwatch_, "rdc_telemetry_fields_unwatch"); - if (status != RDC_ST_OK) { - fields_unwatch_ = nullptr; - } -} - -RdcRasLib::~RdcRasLib() { - if (rdc_module_destroy_) { - rdc_module_destroy_(); - } -} - -rdc_status_t RdcRasLib::rdc_telemetry_fields_query(uint32_t field_ids[MAX_NUM_FIELDS], - uint32_t* field_count) { - if (field_count == nullptr) { - return RDC_ST_BAD_PARAMETER; - } - if (!fields_query_) { - *field_count = 0; - return RDC_ST_FAIL_LOAD_MODULE; - } - - auto status = fields_query_(field_ids, field_count); - RDC_LOG(RDC_DEBUG, "RAS support " << *field_count << " fields"); - return status; -} - -rdc_status_t RdcRasLib::rdc_telemetry_fields_value_get(rdc_gpu_field_t* fields, - uint32_t fields_count, - rdc_field_value_f callback, - void* user_data) { - if (fields == nullptr) { - return RDC_ST_BAD_PARAMETER; - } - if (!fields_value_get_) { - return RDC_ST_FAIL_LOAD_MODULE; - } - rdc_status_t status = fields_value_get_(fields, fields_count, callback, user_data); - RDC_LOG(RDC_DEBUG, - "Bulk fetched " << fields_count << " fields from RAS: " << rdc_status_string(status)); - return status; -} - -rdc_status_t RdcRasLib::rdc_telemetry_fields_watch(rdc_gpu_field_t* fields, uint32_t fields_count) { - if (fields == nullptr) { - return RDC_ST_BAD_PARAMETER; - } - if (!fields_watch_) { - return RDC_ST_FAIL_LOAD_MODULE; - } - rdc_status_t status = fields_watch_(fields, fields_count); - RDC_LOG(RDC_DEBUG, "Watch " << fields_count << " fields from RAS: " << rdc_status_string(status)); - return status; -} - -rdc_status_t RdcRasLib::rdc_telemetry_fields_unwatch(rdc_gpu_field_t* fields, - uint32_t fields_count) { - if (fields == nullptr) { - return RDC_ST_BAD_PARAMETER; - } - if (!fields_unwatch_) { - return RDC_ST_FAIL_LOAD_MODULE; - } - rdc_status_t status = fields_unwatch_(fields, fields_count); - RDC_LOG(RDC_DEBUG, - "Unwatch " << fields_count << " fields from RAS: " << rdc_status_string(status)); - return status; -} - -rdc_status_t RdcRasLib::rdc_diag_test_cases_query(rdc_diag_test_cases_t test_cases[MAX_TEST_CASES], - uint32_t* test_case_count) { - (void)test_cases; - (void)test_case_count; - return RDC_ST_NOT_SUPPORTED; -} - -// Run a specific test case -rdc_status_t RdcRasLib::rdc_test_case_run(rdc_diag_test_cases_t test_case, - uint32_t gpu_index[RDC_MAX_NUM_DEVICES], - uint32_t gpu_count, const char* config, - size_t config_size, rdc_diag_test_result_t* result) { - (void)test_case; - (void)gpu_index; - (void)result; - (void)gpu_count; - (void)config; - (void)config_size; - return RDC_ST_NOT_SUPPORTED; -} - -rdc_status_t RdcRasLib::rdc_diagnostic_run(const rdc_group_info_t& gpus, rdc_diag_level_t level, - const char* config, size_t config_size, - rdc_diag_response_t* response) { - (void)gpus; - (void)level; - (void)config; - (void)config_size; - (void)response; - return RDC_ST_NOT_SUPPORTED; -} - -rdc_status_t RdcRasLib::rdc_diag_init(uint64_t flags) { - (void)flags; - return RDC_ST_NOT_SUPPORTED; -} -rdc_status_t RdcRasLib::rdc_diag_destroy() { return RDC_ST_NOT_SUPPORTED; } - -} // namespace rdc -} // namespace amd diff --git a/rdc_libs/rdc/src/RdcSmiLib.cc b/rdc_libs/rdc/src/RdcSmiLib.cc index 8ede43e270..87e4e4b3fe 100644 --- a/rdc_libs/rdc/src/RdcSmiLib.cc +++ b/rdc_libs/rdc/src/RdcSmiLib.cc @@ -148,28 +148,34 @@ rdc_status_t RdcSmiLib::rdc_telemetry_fields_query(uint32_t field_ids[MAX_NUM_FI // List of fields supported by amd_smi_lib const std::vector fields{ - RDC_FI_GPU_COUNT, RDC_FI_DEV_NAME, - RDC_FI_GPU_CLOCK, RDC_FI_MEM_CLOCK, - RDC_FI_MEMORY_TEMP, RDC_FI_GPU_TEMP, - RDC_FI_POWER_USAGE, RDC_FI_PCIE_TX, - RDC_FI_PCIE_RX, RDC_FI_PCIE_BANDWIDTH, - RDC_FI_GPU_UTIL, - RDC_FI_GPU_MEMORY_USAGE, RDC_FI_GPU_MEMORY_TOTAL, - RDC_FI_ECC_CORRECT_TOTAL, RDC_FI_ECC_UNCORRECT_TOTAL, - RDC_FI_XGMI_0_READ_KB, RDC_FI_XGMI_1_READ_KB, - RDC_FI_XGMI_2_READ_KB, RDC_FI_XGMI_3_READ_KB, - RDC_FI_XGMI_4_READ_KB, RDC_FI_XGMI_5_READ_KB, - RDC_FI_XGMI_6_READ_KB, RDC_FI_XGMI_7_READ_KB, - RDC_FI_XGMI_0_WRITE_KB, RDC_FI_XGMI_1_WRITE_KB, - RDC_FI_XGMI_2_WRITE_KB, RDC_FI_XGMI_3_WRITE_KB, - RDC_FI_XGMI_4_WRITE_KB, RDC_FI_XGMI_5_WRITE_KB, - RDC_FI_XGMI_6_WRITE_KB, RDC_FI_XGMI_7_WRITE_KB, - RDC_EVNT_XGMI_0_NOP_TX, RDC_EVNT_XGMI_0_REQ_TX, - RDC_EVNT_XGMI_0_RESP_TX, RDC_EVNT_XGMI_0_BEATS_TX, - RDC_EVNT_XGMI_1_NOP_TX, RDC_EVNT_XGMI_1_REQ_TX, - RDC_EVNT_XGMI_1_RESP_TX, RDC_EVNT_XGMI_1_BEATS_TX, - RDC_EVNT_XGMI_0_THRPUT, RDC_EVNT_XGMI_1_THRPUT, - RDC_EVNT_XGMI_2_THRPUT, RDC_EVNT_XGMI_3_THRPUT, + + RDC_FI_GPU_COUNT, RDC_FI_DEV_NAME, RDC_FI_GPU_CLOCK, + RDC_FI_MEM_CLOCK, RDC_FI_MEMORY_TEMP, RDC_FI_GPU_TEMP, + RDC_FI_POWER_USAGE, RDC_FI_PCIE_TX, RDC_FI_PCIE_RX, + RDC_FI_PCIE_BANDWIDTH, RDC_FI_GPU_UTIL, RDC_FI_GPU_MEMORY_USAGE, + RDC_FI_GPU_MEMORY_TOTAL, RDC_FI_ECC_CORRECT_TOTAL, RDC_FI_ECC_UNCORRECT_TOTAL, + RDC_FI_ECC_SDMA_CE, RDC_FI_ECC_SDMA_UE, RDC_FI_ECC_GFX_CE, + RDC_FI_ECC_GFX_UE, RDC_FI_ECC_MMHUB_CE, RDC_FI_ECC_MMHUB_UE, + RDC_FI_ECC_ATHUB_CE, RDC_FI_ECC_ATHUB_UE, RDC_FI_ECC_PCIE_BIF_CE, + RDC_FI_ECC_PCIE_BIF_UE, RDC_FI_ECC_HDP_CE, RDC_FI_ECC_HDP_UE, + RDC_FI_ECC_XGMI_WAFL_CE, RDC_FI_ECC_XGMI_WAFL_UE, RDC_FI_ECC_DF_CE, + RDC_FI_ECC_DF_UE, RDC_FI_ECC_SMN_CE, RDC_FI_ECC_SMN_UE, + RDC_FI_ECC_SEM_CE, RDC_FI_ECC_SEM_UE, RDC_FI_ECC_MP0_CE, + RDC_FI_ECC_MP0_UE, RDC_FI_ECC_MP1_CE, RDC_FI_ECC_MP1_UE, + RDC_FI_ECC_FUSE_CE, RDC_FI_ECC_FUSE_UE, RDC_FI_ECC_UMC_CE, + RDC_FI_ECC_UMC_UE, RDC_FI_ECC_MCA_CE, RDC_FI_ECC_MCA_UE, + RDC_FI_ECC_VCN_CE, RDC_FI_ECC_VCN_UE, RDC_FI_ECC_JPEG_CE, + RDC_FI_ECC_JPEG_UE, RDC_FI_ECC_IH_CE, RDC_FI_ECC_IH_UE, + RDC_FI_ECC_MPIO_CE, RDC_FI_ECC_MPIO_UE, RDC_FI_XGMI_0_READ_KB, + RDC_FI_XGMI_1_READ_KB, RDC_FI_XGMI_2_READ_KB, RDC_FI_XGMI_3_READ_KB, + RDC_FI_XGMI_4_READ_KB, RDC_FI_XGMI_5_READ_KB, RDC_FI_XGMI_6_READ_KB, + RDC_FI_XGMI_7_READ_KB, RDC_FI_XGMI_0_WRITE_KB, RDC_FI_XGMI_1_WRITE_KB, + RDC_FI_XGMI_2_WRITE_KB, RDC_FI_XGMI_3_WRITE_KB, RDC_FI_XGMI_4_WRITE_KB, + RDC_FI_XGMI_5_WRITE_KB, RDC_FI_XGMI_6_WRITE_KB, RDC_FI_XGMI_7_WRITE_KB, + RDC_EVNT_XGMI_0_NOP_TX, RDC_EVNT_XGMI_0_REQ_TX, RDC_EVNT_XGMI_0_RESP_TX, + RDC_EVNT_XGMI_0_BEATS_TX, RDC_EVNT_XGMI_1_NOP_TX, RDC_EVNT_XGMI_1_REQ_TX, + RDC_EVNT_XGMI_1_RESP_TX, RDC_EVNT_XGMI_1_BEATS_TX, RDC_EVNT_XGMI_0_THRPUT, + RDC_EVNT_XGMI_1_THRPUT, RDC_EVNT_XGMI_2_THRPUT, RDC_EVNT_XGMI_3_THRPUT, RDC_EVNT_XGMI_4_THRPUT, RDC_EVNT_XGMI_5_THRPUT, }; std::copy(fields.begin(), fields.end(), field_ids); diff --git a/rdc_libs/rdc/src/RdcTelemetryModule.cc b/rdc_libs/rdc/src/RdcTelemetryModule.cc index e0f4e31450..672de32bec 100644 --- a/rdc_libs/rdc/src/RdcTelemetryModule.cc +++ b/rdc_libs/rdc/src/RdcTelemetryModule.cc @@ -24,8 +24,8 @@ THE SOFTWARE. #include #include "rdc_lib/RdcException.h" +#include "rdc_lib/RdcLogger.h" #include "rdc_lib/RdcMetricFetcher.h" -#include "rdc_lib/impl/RdcRasLib.h" #include "rdc_lib/impl/RdcSmiLib.h" namespace amd { diff --git a/tests/rdc_tests/CMakeLists.txt b/tests/rdc_tests/CMakeLists.txt index 59d2c5d618..7795d15b0e 100755 --- a/tests/rdc_tests/CMakeLists.txt +++ b/tests/rdc_tests/CMakeLists.txt @@ -76,7 +76,6 @@ target_include_directories( target_link_libraries(${RDCTST} PUBLIC rdc_bootstrap PUBLIC rdc - PUBLIC rdc_ras PUBLIC GTest::gtest_main PUBLIC c PUBLIC stdc++