summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-04-08 17:21:59 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-04-08 17:21:59 +0000
commit1ca58db7c2ab2802767f50a5fcfca62ca331b546 (patch)
tree5c6df65fd83705e700ed61ad9801aa61b87bdb9e
parentc53634d4bcd98528c7219a895935ca826c94a613 (diff)
downloadfpc-1ca58db7c2ab2802767f50a5fcfca62ca331b546.tar.gz
+ Aarch64: create better code for not(<byte>)
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@49135 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/aarch64/cgcpu.pas9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/aarch64/cgcpu.pas b/compiler/aarch64/cgcpu.pas
index 5e01f7dddc..270fc53933 100644
--- a/compiler/aarch64/cgcpu.pas
+++ b/compiler/aarch64/cgcpu.pas
@@ -1336,8 +1336,13 @@ implementation
OP_NEG,
OP_NOT:
begin
- list.concat(taicpu.op_reg_reg(TOpCG2AsmOpReg[op],dst,src));
- maybeadjustresult(list,op,size,dst);
+ if (op=OP_NOT) and (size in [OS_8,OS_S8]) then
+ list.concat(taicpu.op_reg_reg_const(A_EOR,dst,src,255))
+ else
+ begin
+ list.concat(taicpu.op_reg_reg(TOpCG2AsmOpReg[op],dst,src));
+ maybeadjustresult(list,op,size,dst);
+ end;
end
else
a_op_reg_reg_reg(list,op,size,src,dst,dst);