This is how it looks in SASS. When I read the shared unsigned short to unsigned integer, there is no problem. I don’t quite understand the lines with PRMT in SASS but I suspect that it is using a single register for 2 short values and debugger cannot handle that.
unsigned short val_1 = s_array_1[sh_index];
0x00000165180d2820 MOV R6, R17
0x00000165180d2830 SHF.R.S32.HI R7, RZ, 0x1f, R6
0x00000165180d2840 MOV R6, R6
0x00000165180d2850 MOV R7, R7
0x00000165180d2860 MOV R8, R6
0x00000165180d2870 MOV R9, R7
0x00000165180d2880 MOV R8, R8
0x00000165180d2890 MOV R9, R9
0x00000165180d28a0 SHF.L.U64.HI R9, R8, 0x1, R9
0x00000165180d28b0 SHF.L.U32 R8, R8, 0x1, RZ
0x00000165180d28c0 MOV R3, 0x6400
0x00000165180d28d0 MOV R3, R3
0x00000165180d28e0 MOV R3, R3
0x00000165180d28f0 MOV R3, R3
0x00000165180d2900 MOV R5, RZ
0x00000165180d2910 MOV R6, c[0x0][0x18]
0x00000165180d2920 MOV R7, c[0x0][0x1c]
0x00000165180d2930 IADD3 R6, P0, R3, R6, RZ
0x00000165180d2940 IADD3.X R7, R5, R7, RZ, P0, !PT
0x00000165180d2950 IADD3 R6, P0, R6, R8, RZ
0x00000165180d2960 IADD3.X R7, R7, R9, RZ, P0, !PT
0x00000165180d2970 MOV R6, R6
0x00000165180d2980 MOV R7, R7
0x00000165180d2990 MOV R6, R6
0x00000165180d29a0 MOV R7, R7
0x00000165180d29b0 LD.E.U16.SYS R6, [R6]
0x00000165180d29c0 PRMT R6, R6, 0x7610, R6
0x00000165180d29d0 PRMT R18, R6, 0x7610, R18
unsigned short val_2 = s_array_2[sh_index];
0x00000165180d29e0 MOV R6, R17
0x00000165180d29f0 SHF.R.S32.HI R7, RZ, 0x1f, R6
0x00000165180d2a00 MOV R6, R6
0x00000165180d2a10 MOV R7, R7
0x00000165180d2a20 MOV R8, R6
0x00000165180d2a30 MOV R9, R7
0x00000165180d2a40 MOV R8, R8
0x00000165180d2a50 MOV R9, R9
0x00000165180d2a60 SHF.L.U64.HI R9, R8, 0x1, R9
0x00000165180d2a70 SHF.L.U32 R8, R8, 0x1, RZ
0x00000165180d2a80 MOV R3, 0x9600
0x00000165180d2a90 MOV R3, R3
0x00000165180d2aa0 MOV R3, R3
0x00000165180d2ab0 MOV R3, R3
0x00000165180d2ac0 MOV R5, RZ
0x00000165180d2ad0 MOV R6, c[0x0][0x18]
0x00000165180d2ae0 MOV R7, c[0x0][0x1c]
0x00000165180d2af0 IADD3 R6, P0, R3, R6, RZ
0x00000165180d2b00 IADD3.X R7, R5, R7, RZ, P0, !PT
0x00000165180d2b10 IADD3 R6, P0, R6, R8, RZ
0x00000165180d2b20 IADD3.X R7, R7, R9, RZ, P0, !PT
0x00000165180d2b30 MOV R6, R6
0x00000165180d2b40 MOV R7, R7
0x00000165180d2b50 MOV R6, R6
0x00000165180d2b60 MOV R7, R7
0x00000165180d2b70 LD.E.U16.SYS R6, [R6]
0x00000165180d2b80 PRMT R6, R6, 0x7610, R6
0x00000165180d2b90 PRMT R19, R6, 0x7610, R19
The problem is solved by reading the values to integers. The problem seems to with the debugger, because it produces correct results with both using ints or shorts.