From 67cea74ec613aa6b6c9f619ccdfe1b8f556c1c49 Mon Sep 17 00:00:00 2001 From: nickysn Date: Tue, 5 Jan 2021 07:50:05 +0000 Subject: [PATCH] + implemented twasmtypeconvnode.second_int_to_bool git-svn-id: branches/wasm@48076 - --- .gitattributes | 1 + compiler/wasm32/cpunode.pas | 2 +- compiler/wasm32/nwasmcnv.pas | 66 ++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 compiler/wasm32/nwasmcnv.pas diff --git a/.gitattributes b/.gitattributes index d1f1a6445e..ab1a6aa3ce 100644 --- a/.gitattributes +++ b/.gitattributes @@ -987,6 +987,7 @@ compiler/wasm32/itcpugas.pas svneol=native#text/plain compiler/wasm32/itcpuwasm.pas svneol=native#text/plain compiler/wasm32/nwasmadd.pas svneol=native#text/plain compiler/wasm32/nwasmcal.pas svneol=native#text/plain +compiler/wasm32/nwasmcnv.pas svneol=native#text/plain compiler/wasm32/nwasmcon.pas svneol=native#text/plain compiler/wasm32/nwasmflw.pas svneol=native#text/plain compiler/wasm32/nwasmmat.pas svneol=native#text/plain diff --git a/compiler/wasm32/cpunode.pas b/compiler/wasm32/cpunode.pas index dcf40b9eb0..116c449f94 100644 --- a/compiler/wasm32/cpunode.pas +++ b/compiler/wasm32/cpunode.pas @@ -33,7 +33,7 @@ implementation ncgbas,ncgflw,ncgcnv,ncgld,ncgmem,ncgcon,ncgset, ncgadd, ncgcal,ncgmat,ncginl, - nwasmadd, nwasmcal, nwasmmat, nwasmflw, nwasmcon, + nwasmadd,nwasmcal,nwasmmat,nwasmflw,nwasmcon,nwasmcnv, (* todo: WASM njvmcnv,njvmcon,njvminl,njvmmem,njvmld, njvmset,njvmvmt diff --git a/compiler/wasm32/nwasmcnv.pas b/compiler/wasm32/nwasmcnv.pas new file mode 100644 index 0000000000..c21dc5dbea --- /dev/null +++ b/compiler/wasm32/nwasmcnv.pas @@ -0,0 +1,66 @@ +{ + Copyright (c) 1998-2020 by Florian Klaempfl and Nikolay Nikolov + + Generate WebAssembly code for type converting 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 nwasmcnv; + +{$i fpcdefs.inc} + +interface + + uses + ncnv,ncgcnv; + + type + + { twasmtypeconvnode } + + twasmtypeconvnode = class(tcgtypeconvnode) + protected + procedure second_int_to_bool;override; + end; + +implementation + + uses + globals,aasmdata, + defutil, + cgbase,cgutils,pass_2, + hlcgobj,hlcgcpu; + + +{ twasmtypeconvnode } + + procedure twasmtypeconvnode.second_int_to_bool; + begin + secondpass(left); + if codegenerror then + exit; + thlcgwasm(hlcg).a_load_loc_stack(current_asmdata.CurrAsmList,left.resultdef,left.location); + thlcgwasm(hlcg).a_load_const_stack(current_asmdata.CurrAsmList,left.resultdef,0,R_INTREGISTER); + thlcgwasm(hlcg).a_cmp_stack_stack(current_asmdata.CurrAsmList,left.resultdef,OC_NE); + thlcgwasm(hlcg).resize_stack_int_val(current_asmdata.CurrAsmList,left.resultdef,resultdef,false); + location_reset(location,LOC_REGISTER,def_cgsize(resultdef)); + location.register := hlcg.getintregister(current_asmdata.CurrAsmList,resultdef); + thlcgwasm(hlcg).a_load_stack_loc(current_asmdata.CurrAsmList,resultdef,location); + end; + +begin + ctypeconvnode:=twasmtypeconvnode; +end.