diff --git a/.gitattributes b/.gitattributes index 5eaebf9766..b48f4d2436 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1026,6 +1026,7 @@ compiler/xtensa/hlcgcpu.pas svneol=native#text/pascal compiler/xtensa/itcpugas.pas svneol=native#text/pascal compiler/xtensa/ncpuadd.pas svneol=native#text/pascal compiler/xtensa/ncpucnv.pas svneol=native#text/pascal +compiler/xtensa/ncpuinl.pas svneol=native#text/pascal compiler/xtensa/ncpumat.pas svneol=native#text/pascal compiler/xtensa/ncpuutil.pas svneol=native#text/pascal compiler/xtensa/racpugas.pas svneol=native#text/pascal diff --git a/compiler/xtensa/cpunode.pas b/compiler/xtensa/cpunode.pas index 7d221b2e1d..4ad1118c18 100644 --- a/compiler/xtensa/cpunode.pas +++ b/compiler/xtensa/cpunode.pas @@ -35,7 +35,7 @@ implementation symcpu, aasmdef {$ifndef llvm} - ,ncpuadd,ncpumat,ncpucnv,ncpuutil//,ncpumem,ncpuset,ncpucon + ,ncpuadd,ncpumat,ncpucnv,ncpuutil,ncpuinl//,ncpumem,ncpuset,ncpucon {$else llvm} llvmnode {$endif llvm} diff --git a/compiler/xtensa/ncpuinl.pas b/compiler/xtensa/ncpuinl.pas new file mode 100644 index 0000000000..c934598b84 --- /dev/null +++ b/compiler/xtensa/ncpuinl.pas @@ -0,0 +1,63 @@ +{ + Copyright (c) 1998-2017 by Florian Klaempfl + + Generates Xtensa inline nodes + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + **************************************************************************** +} +unit ncpuinl; + +{$i fpcdefs.inc} + + interface + + uses + node,ninl,ncginl, aasmbase; + + type + tcpuinlineNode = class(tcginlinenode) + procedure second_abs_long; override; + end; + + implementation + + uses + compinnr, + aasmdata, + aasmcpu, + symdef, + defutil, + hlcgobj, + pass_2, + cgbase, cgobj, cgutils, + cpubase; + + procedure tcpuinlinenode.second_abs_long; + begin + secondpass(left); + hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,left.resultdef,false); + + location:=left.location; + location.register:=hlcg.getintregister(current_asmdata.CurrAsmList,left.resultdef); + + current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg(A_ABS,location.register,left.location.register)); + end; + + +begin + cinlinenode:=tcpuinlinenode; +end. diff --git a/compiler/xtensa/xtensaatt.inc b/compiler/xtensa/xtensaatt.inc index 1ab042025b..add62493e0 100644 --- a/compiler/xtensa/xtensaatt.inc +++ b/compiler/xtensa/xtensaatt.inc @@ -1,5 +1,6 @@ ( 'none', +'abs', 'add', 'addi', 'addmi', diff --git a/compiler/xtensa/xtensaop.inc b/compiler/xtensa/xtensaop.inc index 2cc02a95e7..420986ef5f 100644 --- a/compiler/xtensa/xtensaop.inc +++ b/compiler/xtensa/xtensaop.inc @@ -1,5 +1,6 @@ ( A_NONE, +A_ABS, A_ADD, A_ADDI, A_ADDMI,