Browse Source
The following instructions are added in this patch: - ADDPT and SUBPT - Add/Subtract checked pointer - MADDPT and MSUBPT - Multiply Add/Subtract checked pointer These instructions are part of Checked Pointer Arithmetic extension. This patch adds assembler and disassembler support for these instructions with relevant checks. Tests are included as well. A new flag "+cpa" added to documentation. This flag enables CPA extension. Regression tested on the aarch64-none-linux-gnu target and no regressions have been found.master
committed by
Nick Clifton
16 changed files with 313 additions and 1 deletions
@ -0,0 +1,4 @@ |
|||
#name: Incorrect input test for CPA instructions ((M)ADDPT and (M)SUBPT). |
|||
#as: -march=armv8-a+cpa |
|||
#source: cpa-addsub-bad.s |
|||
#error_output: cpa-addsub-bad.l |
|||
@ -0,0 +1,50 @@ |
|||
.*: Assembler messages: |
|||
.*: Error: operand mismatch -- `addpt w5,w8,w0' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+addpt x5, x8, x0 |
|||
.*: Error: only 'LSL' shift is permitted at operand 3 -- `addpt x5,x8,x0,asr#6' |
|||
.*: Error: shift amount out of range 0 to 7 at operand 3 -- `addpt x5,x8,x0,lsl#9' |
|||
.*: Error: expected an integer or zero register at operand 3 -- `addpt x5,x8,sp,lsl#5' |
|||
.*: Error: expected an integer or stack pointer register at operand 1 -- `addpt xzr,x8,x0,lsl#3' |
|||
|
|||
.*: Error: operand mismatch -- `subpt w5,w8,w0' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+subpt x5, x8, x0 |
|||
.*: Error: only 'LSL' shift is permitted at operand 3 -- `subpt x5,x8,x0,asr#6' |
|||
.*: Error: shift amount out of range 0 to 7 at operand 3 -- `subpt x5,x8,x0,lsl#9' |
|||
.*: Error: expected an integer or zero register at operand 3 -- `subpt x5,x8,sp,lsl#5' |
|||
.*: Error: expected an integer or stack pointer register at operand 1 -- `subpt xzr,x8,x0,lsl#3' |
|||
|
|||
.*: Error: operand mismatch -- `maddpt w1,x2,x3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+maddpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `maddpt x1,w2,x3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+maddpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `maddpt x1,x2,w3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+maddpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `maddpt x1,x2,x3,w4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+maddpt x1, x2, x3, x4 |
|||
.*: Error: expected an integer or zero register at operand 1 -- `maddpt sp,x2,x3,x4' |
|||
.*: Error: expected an integer or zero register at operand 2 -- `maddpt x1,sp,x3,x4' |
|||
.*: Error: expected an integer or zero register at operand 3 -- `maddpt x1,x2,sp,x4' |
|||
.*: Error: expected an integer or zero register at operand 4 -- `maddpt x1,x2,x3,sp' |
|||
|
|||
.*: Error: operand mismatch -- `msubpt w1,x2,x3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+msubpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `msubpt x1,w2,x3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+msubpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `msubpt x1,x2,w3,x4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+msubpt x1, x2, x3, x4 |
|||
.*: Error: operand mismatch -- `msubpt x1,x2,x3,w4' |
|||
.*: Info:\s+did you mean this\? |
|||
.*: Info:\s+msubpt x1, x2, x3, x4 |
|||
.*: Error: expected an integer or zero register at operand 1 -- `msubpt sp,x2,x3,x4' |
|||
.*: Error: expected an integer or zero register at operand 2 -- `msubpt x1,sp,x3,x4' |
|||
.*: Error: expected an integer or zero register at operand 3 -- `msubpt x1,x2,sp,x4' |
|||
.*: Error: expected an integer or zero register at operand 4 -- `msubpt x1,x2,x3,sp' |
|||
@ -0,0 +1,29 @@ |
|||
addpt w5, w8, w0 |
|||
addpt x5, x8, x0, asr #6 |
|||
addpt x5, x8, x0, lsl #9 |
|||
addpt x5, x8, sp, lsl #5 |
|||
addpt xzr, x8, x0, lsl #3 |
|||
|
|||
subpt w5, w8, w0 |
|||
subpt x5, x8, x0, asr #6 |
|||
subpt x5, x8, x0, lsl #9 |
|||
subpt x5, x8, sp, lsl #5 |
|||
subpt xzr, x8, x0, lsl #3 |
|||
|
|||
maddpt w1, x2, x3, x4 |
|||
maddpt x1, w2, x3, x4 |
|||
maddpt x1, x2, w3, x4 |
|||
maddpt x1, x2, x3, w4 |
|||
maddpt sp, x2, x3, x4 |
|||
maddpt x1, sp, x3, x4 |
|||
maddpt x1, x2, sp, x4 |
|||
maddpt x1, x2, x3, sp |
|||
|
|||
msubpt w1, x2, x3, x4 |
|||
msubpt x1, w2, x3, x4 |
|||
msubpt x1, x2, w3, x4 |
|||
msubpt x1, x2, x3, w4 |
|||
msubpt sp, x2, x3, x4 |
|||
msubpt x1, sp, x3, x4 |
|||
msubpt x1, x2, sp, x4 |
|||
msubpt x1, x2, x3, sp |
|||
@ -0,0 +1,5 @@ |
|||
#name: Negative test for CPA instructions ((M)ADDPT and (M)SUBPT). |
|||
#as: -march=armv8-a |
|||
#as: -march=armv9-a |
|||
#source: cpa-addsub.s |
|||
#error_output: cpa-addsub-neg.l |
|||
@ -0,0 +1,27 @@ |
|||
.*: Assembler messages: |
|||
.*: Error: selected processor does not support `addpt x0,x0,x0' |
|||
.*: Error: selected processor does not support `addpt sp,x0,x0' |
|||
.*: Error: selected processor does not support `addpt x0,sp,x0' |
|||
.*: Error: selected processor does not support `addpt x0,x0,xzr' |
|||
.*: Error: selected processor does not support `addpt x0,x0,x0,lsl#0' |
|||
.*: Error: selected processor does not support `addpt x0,x0,x0,lsl#7' |
|||
.*: Error: selected processor does not support `addpt x8,x13,x29,lsl#5' |
|||
.*: Error: selected processor does not support `subpt x0,x0,x0' |
|||
.*: Error: selected processor does not support `subpt sp,x0,x0' |
|||
.*: Error: selected processor does not support `subpt x0,sp,x0' |
|||
.*: Error: selected processor does not support `subpt x0,x0,xzr' |
|||
.*: Error: selected processor does not support `subpt x0,x0,x0,lsl#0' |
|||
.*: Error: selected processor does not support `subpt x0,x0,x0,lsl#7' |
|||
.*: Error: selected processor does not support `subpt x1,x10,x22,lsl#2' |
|||
.*: Error: selected processor does not support `maddpt x0,x0,x0,x0' |
|||
.*: Error: selected processor does not support `maddpt xzr,x0,x0,x0' |
|||
.*: Error: selected processor does not support `maddpt x0,xzr,x0,x0' |
|||
.*: Error: selected processor does not support `maddpt x0,x0,xzr,x0' |
|||
.*: Error: selected processor does not support `maddpt x0,x0,x0,xzr' |
|||
.*: Error: selected processor does not support `maddpt x19,x10,x1,x28' |
|||
.*: Error: selected processor does not support `msubpt x0,x0,x0,x0' |
|||
.*: Error: selected processor does not support `msubpt xzr,x0,x0,x0' |
|||
.*: Error: selected processor does not support `msubpt x0,xzr,x0,x0' |
|||
.*: Error: selected processor does not support `msubpt x0,x0,xzr,x0' |
|||
.*: Error: selected processor does not support `msubpt x0,x0,x0,xzr' |
|||
.*: Error: selected processor does not support `msubpt x4,x13,x9,x21' |
|||
@ -0,0 +1,39 @@ |
|||
#name: Tests for CPA instructions ((M)ADDPT and (M)SUBPT). |
|||
#as: -march=armv8-a+cpa |
|||
#objdump: -dr |
|||
|
|||
[^:]+: file format .* |
|||
|
|||
|
|||
[^:]+: |
|||
|
|||
[^:]+: |
|||
.*: 9a002000 addpt x0, x0, x0 |
|||
.*: 9a00201f addpt sp, x0, x0 |
|||
.*: 9a0023e0 addpt x0, sp, x0 |
|||
.*: 9a1f2000 addpt x0, x0, xzr |
|||
.*: 9a002000 addpt x0, x0, x0 |
|||
.*: 9a003c00 addpt x0, x0, x0, lsl #7 |
|||
.*: 9a1d35a8 addpt x8, x13, x29, lsl #5 |
|||
|
|||
.*: da002000 subpt x0, x0, x0 |
|||
.*: da00201f subpt sp, x0, x0 |
|||
.*: da0023e0 subpt x0, sp, x0 |
|||
.*: da1f2000 subpt x0, x0, xzr |
|||
.*: da002000 subpt x0, x0, x0 |
|||
.*: da003c00 subpt x0, x0, x0, lsl #7 |
|||
.*: da162941 subpt x1, x10, x22, lsl #2 |
|||
|
|||
.*: 9b600000 maddpt x0, x0, x0, x0 |
|||
.*: 9b60001f maddpt xzr, x0, x0, x0 |
|||
.*: 9b6003e0 maddpt x0, xzr, x0, x0 |
|||
.*: 9b7f0000 maddpt x0, x0, xzr, x0 |
|||
.*: 9b607c00 maddpt x0, x0, x0, xzr |
|||
.*: 9b617153 maddpt x19, x10, x1, x28 |
|||
|
|||
.*: 9b608000 msubpt x0, x0, x0, x0 |
|||
.*: 9b60801f msubpt xzr, x0, x0, x0 |
|||
.*: 9b6083e0 msubpt x0, xzr, x0, x0 |
|||
.*: 9b7f8000 msubpt x0, x0, xzr, x0 |
|||
.*: 9b60fc00 msubpt x0, x0, x0, xzr |
|||
.*: 9b69d5a4 msubpt x4, x13, x9, x21 |
|||
@ -0,0 +1,29 @@ |
|||
addpt x0, x0, x0 |
|||
addpt sp, x0, x0 |
|||
addpt x0, sp, x0 |
|||
addpt x0, x0, xzr |
|||
addpt x0, x0, x0, lsl #0 |
|||
addpt x0, x0, x0, lsl #7 |
|||
addpt x8, x13, x29, lsl #5 |
|||
|
|||
subpt x0, x0, x0 |
|||
subpt sp, x0, x0 |
|||
subpt x0, sp, x0 |
|||
subpt x0, x0, xzr |
|||
subpt x0, x0, x0, lsl #0 |
|||
subpt x0, x0, x0, lsl #7 |
|||
subpt x1, x10, x22, lsl #2 |
|||
|
|||
maddpt x0, x0, x0, x0 |
|||
maddpt xzr, x0, x0, x0 |
|||
maddpt x0, xzr, x0, x0 |
|||
maddpt x0, x0, xzr, x0 |
|||
maddpt x0, x0, x0, xzr |
|||
maddpt x19, x10, x1, x28 |
|||
|
|||
msubpt x0, x0, x0, x0 |
|||
msubpt xzr, x0, x0, x0 |
|||
msubpt x0, xzr, x0, x0 |
|||
msubpt x0, x0, xzr, x0 |
|||
msubpt x0, x0, x0, xzr |
|||
msubpt x4, x13, x9, x21 |
|||
Loading…
Reference in new issue