unsigned vm = INSTR (9, 5);
unsigned rd = INSTR (4, 0);
unsigned i;
- uint64_t val = 0;
int full = INSTR (30, 30);
NYI_assert (29, 24, 0x0E);
switch (INSTR (23, 22))
{
case 0:
- for (i = 0; i < (full ? 16 : 8); i++)
- val += aarch64_get_vec_u8 (cpu, vm, i);
- aarch64_set_vec_u64 (cpu, rd, 0, val);
- return;
+ {
+ uint8_t val = 0;
+ for (i = 0; i < (full ? 16 : 8); i++)
+ val += aarch64_get_vec_u8 (cpu, vm, i);
+ aarch64_set_vec_u64 (cpu, rd, 0, val);
+ return;
+ }
case 1:
- for (i = 0; i < (full ? 8 : 4); i++)
- val += aarch64_get_vec_u16 (cpu, vm, i);
- aarch64_set_vec_u64 (cpu, rd, 0, val);
- return;
+ {
+ uint16_t val = 0;
+ for (i = 0; i < (full ? 8 : 4); i++)
+ val += aarch64_get_vec_u16 (cpu, vm, i);
+ aarch64_set_vec_u64 (cpu, rd, 0, val);
+ return;
+ }
case 2:
- if (! full)
- HALT_UNALLOC;
- for (i = 0; i < 4; i++)
- val += aarch64_get_vec_u32 (cpu, vm, i);
- aarch64_set_vec_u64 (cpu, rd, 0, val);
- return;
+ {
+ uint32_t val = 0;
+ if (! full)
+ HALT_UNALLOC;
+ for (i = 0; i < 4; i++)
+ val += aarch64_get_vec_u32 (cpu, vm, i);
+ aarch64_set_vec_u64 (cpu, rd, 0, val);
+ return;
+ }
case 3:
HALT_UNALLOC;
NYI_assert (19, 19, 1);
shift = INSTR (18, 16);
- bias *= 3;
+ bias *= 4;
for (i = 0; i < 8; i++)
v[i] = aarch64_get_vec_s8 (cpu, vs, i + bias) << shift;
for (i = 0; i < 8; i++)
NYI_assert (19, 19, 1);
shift = INSTR (18, 16);
- bias *= 3;
+ bias *= 4;
for (i = 0; i < 8; i++)
v[i] = aarch64_get_vec_u8 (cpu, vs, i + bias) << shift;
for (i = 0; i < 8; i++)
bif v3.8b, v1.8b, v2.8b
addv b4, v3.8b
mov x1, v4.d[0]
- cmp x1, #306
+ cmp x1, #50
bne .Lfailure
mov v3.16b, v0.16b
bif v3.16b, v1.16b, v2.16b
addv b4, v3.16b
mov x1, v4.d[0]
- cmp x1, #1020
+ cmp x1, #252
bne .Lfailure
mov v3.8b, v0.8b
bit v3.8b, v1.8b, v2.8b
addv b4, v3.8b
mov x1, v4.d[0]
- cmp x1, #306
+ cmp x1, #50
bne .Lfailure
mov v3.16b, v0.16b
bit v3.16b, v1.16b, v2.16b
addv b4, v3.16b
mov x1, v4.d[0]
- cmp x1, #1037
+ cmp x1, #13
bne .Lfailure
mov v3.8b, v2.8b
bsl v3.8b, v0.8b, v1.8b
addv b4, v3.8b
mov x1, v4.d[0]
- cmp x1, #306
+ cmp x1, #50
bne .Lfailure
mov v3.16b, v2.16b
bsl v3.16b, v0.16b, v1.16b
addv b4, v3.16b
mov x1, v4.d[0]
- cmp x1, #1020
+ cmp x1, #252
bne .Lfailure
mov v3.8b, v0.8b
eor v3.8b, v1.8b, v2.8b
addv b4, v3.8b
mov x1, v4.d[0]
- cmp x1, #1020
+ cmp x1, #252
bne .Lfailure
mov v3.16b, v0.16b
eor v3.16b, v1.16b, v2.16b
addv b4, v3.16b
mov x1, v4.d[0]
- cmp x1, #2039
+ cmp x1, #247
bne .Lfailure
pass
cmtst v2.8b, v0.8b, v1.8b
addv b3, v2.8b
mov x1, v3.d[0]
- cmp x1, #0x5fa
+ cmp x1, #0xfa
bne .Lfailure
cmtst v2.16b, v0.16b, v1.16b
addv b3, v2.16b
mov x1, v3.d[0]
- cmp x1, #0xbf4
+ cmp x1, #0xf4
bne .Lfailure
adrp x0, inputh
cmtst v2.4h, v0.4h, v1.4h
addv h3, v2.4h
mov x1, v3.d[0]
- mov x2, #0x1fffe
+ mov x2, #0xfffe
cmp x1, x2
bne .Lfailure
cmtst v2.8h, v0.8h, v1.8h
addv h3, v2.8h
mov x1, v3.d[0]
- mov x2, #0x3fffc
+ mov x2, #0xfffc
cmp x1, x2
bne .Lfailure
cmtst v2.4s, v0.4s, v1.4s
addv s3, v2.4s
mov x1, v3.d[0]
- mov x2, #0x1fffffffe
+ mov x2, #0xfffffffe
cmp x1, x2
bne .Lfailure
--- /dev/null
+#mach: aarch64
+
+# Check the extend long instructions: sxtl, sxtl2, uxtl, uxtl2.
+
+.include "testutils.inc"
+
+ .data
+ .align 4
+input:
+ .word 0x04030201
+ .word 0x08070605
+ .word 0xfcfdfeff
+ .word 0xf8f9fafb
+
+ start
+ adrp x0, input
+ ldr q0, [x0, #:lo12:input]
+
+ uxtl v1.8h, v0.8b
+ uxtl2 v2.8h, v0.16b
+ addv h3, v1.8h
+ addv h4, v2.8h
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ cmp x1, #36
+ bne .Lfailure
+ cmp x2, #2012
+ bne .Lfailure
+
+ uxtl v1.4s, v0.4h
+ uxtl2 v2.4s, v0.8h
+ addv s3, v1.4s
+ addv s4, v2.4s
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ mov x3, #5136
+ cmp x1, x3
+ bne .Lfailure
+ mov x4, #0xeff0
+ movk x4, 0x3, lsl #16
+ cmp x2, x4
+ bne .Lfailure
+
+ uxtl v1.2d, v0.2s
+ uxtl2 v2.2d, v0.4s
+ addv s3, v1.4s
+ addv s4, v2.4s
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ mov x3, #0x0806
+ movk x3, #0x0c0a, lsl #16
+ cmp x1, x3
+ bne .Lfailure
+ mov x4, #0xf9fa
+ movk x4, #0xf5f7, lsl #16
+ cmp x2, x4
+ bne .Lfailure
+
+ sxtl v1.8h, v0.8b
+ sxtl2 v2.8h, v0.16b
+ addv h3, v1.8h
+ addv h4, v2.8h
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ cmp x1, #36
+ bne .Lfailure
+ mov x3, #0xffdc
+ cmp x2, x3
+ bne .Lfailure
+
+ sxtl v1.4s, v0.4h
+ sxtl2 v2.4s, v0.8h
+ addv s3, v1.4s
+ addv s4, v2.4s
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ mov x3, #5136
+ cmp x1, x3
+ bne .Lfailure
+ mov x4, #0xeff0
+ movk x4, 0xffff, lsl #16
+ bne .Lfailure
+
+ sxtl v1.2d, v0.2s
+ sxtl2 v2.2d, v0.4s
+ addv s3, v1.4s
+ addv s4, v2.4s
+ mov x1, v3.d[0]
+ mov x2, v4.d[0]
+ mov x3, #0x0806
+ movk x3, #0x0c0a, lsl #16
+ cmp x1, x3
+ bne .Lfailure
+ mov x4, #0xf9f8
+ movk x4, #0xf5f7, lsl #16
+ cmp x2, x4
+ bne .Lfailure
+
+ pass
+.Lfailure:
+ fail