mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 01:39:26 +02:00
+ added instrinsic support for the all the 2-parameter read-modify-write
WebAssembly atomic operations (add, sub, and, or, xor, xchg). Note that they are not implemented in the internal assembler, yet.
This commit is contained in:
parent
c5a443d0dd
commit
d8f06aa4f1
@ -18,5 +18,53 @@
|
||||
in_wasm32_throw_fpcexception = in_cpu_first+3,
|
||||
in_wasm32_memory_copy = in_cpu_first+4,
|
||||
in_wasm32_memory_fill = in_cpu_first+5,
|
||||
in_wasm32_atomic_fence = in_cpu_first+6
|
||||
in_wasm32_atomic_fence = in_cpu_first+6,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_add_u = in_cpu_first+7,
|
||||
in_wasm32_i32_atomic_rmw16_add_u = in_cpu_first+8,
|
||||
in_wasm32_i32_atomic_rmw_add = in_cpu_first+9,
|
||||
in_wasm32_i64_atomic_rmw8_add_u = in_cpu_first+10,
|
||||
in_wasm32_i64_atomic_rmw16_add_u = in_cpu_first+11,
|
||||
in_wasm32_i64_atomic_rmw32_add_u = in_cpu_first+12,
|
||||
in_wasm32_i64_atomic_rmw_add = in_cpu_first+13,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_sub_u = in_cpu_first+14,
|
||||
in_wasm32_i32_atomic_rmw16_sub_u = in_cpu_first+15,
|
||||
in_wasm32_i32_atomic_rmw_sub = in_cpu_first+16,
|
||||
in_wasm32_i64_atomic_rmw8_sub_u = in_cpu_first+17,
|
||||
in_wasm32_i64_atomic_rmw16_sub_u = in_cpu_first+18,
|
||||
in_wasm32_i64_atomic_rmw32_sub_u = in_cpu_first+19,
|
||||
in_wasm32_i64_atomic_rmw_sub = in_cpu_first+20,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_and_u = in_cpu_first+21,
|
||||
in_wasm32_i32_atomic_rmw16_and_u = in_cpu_first+22,
|
||||
in_wasm32_i32_atomic_rmw_and = in_cpu_first+23,
|
||||
in_wasm32_i64_atomic_rmw8_and_u = in_cpu_first+24,
|
||||
in_wasm32_i64_atomic_rmw16_and_u = in_cpu_first+25,
|
||||
in_wasm32_i64_atomic_rmw32_and_u = in_cpu_first+26,
|
||||
in_wasm32_i64_atomic_rmw_and = in_cpu_first+27,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_or_u = in_cpu_first+28,
|
||||
in_wasm32_i32_atomic_rmw16_or_u = in_cpu_first+29,
|
||||
in_wasm32_i32_atomic_rmw_or = in_cpu_first+30,
|
||||
in_wasm32_i64_atomic_rmw8_or_u = in_cpu_first+31,
|
||||
in_wasm32_i64_atomic_rmw16_or_u = in_cpu_first+32,
|
||||
in_wasm32_i64_atomic_rmw32_or_u = in_cpu_first+33,
|
||||
in_wasm32_i64_atomic_rmw_or = in_cpu_first+34,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_xor_u = in_cpu_first+35,
|
||||
in_wasm32_i32_atomic_rmw16_xor_u = in_cpu_first+36,
|
||||
in_wasm32_i32_atomic_rmw_xor = in_cpu_first+37,
|
||||
in_wasm32_i64_atomic_rmw8_xor_u = in_cpu_first+38,
|
||||
in_wasm32_i64_atomic_rmw16_xor_u = in_cpu_first+39,
|
||||
in_wasm32_i64_atomic_rmw32_xor_u = in_cpu_first+40,
|
||||
in_wasm32_i64_atomic_rmw_xor = in_cpu_first+41,
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_xchg_u = in_cpu_first+42,
|
||||
in_wasm32_i32_atomic_rmw16_xchg_u = in_cpu_first+43,
|
||||
in_wasm32_i32_atomic_rmw_xchg = in_cpu_first+44,
|
||||
in_wasm32_i64_atomic_rmw8_xchg_u = in_cpu_first+45,
|
||||
in_wasm32_i64_atomic_rmw16_xchg_u = in_cpu_first+46,
|
||||
in_wasm32_i64_atomic_rmw32_xchg_u = in_cpu_first+47,
|
||||
in_wasm32_i64_atomic_rmw_xchg = in_cpu_first+48
|
||||
|
||||
|
@ -26,7 +26,7 @@ unit nwasminl;
|
||||
interface
|
||||
|
||||
uses
|
||||
node,ncginl;
|
||||
node,ncginl,cpubase;
|
||||
|
||||
type
|
||||
|
||||
@ -52,6 +52,7 @@ interface
|
||||
procedure second_unreachable;
|
||||
procedure second_throw_fpcexception;
|
||||
procedure second_atomic_fence;
|
||||
procedure second_atomic_rmw_x_y(op: TAsmOp);
|
||||
protected
|
||||
function first_sqr_real: tnode; override;
|
||||
public
|
||||
@ -66,7 +67,6 @@ implementation
|
||||
|
||||
uses
|
||||
ninl,ncal,compinnr,
|
||||
cpubase,
|
||||
aasmbase,aasmdata,aasmcpu,
|
||||
cgbase,cgutils,
|
||||
hlcgobj,hlcgcpu,
|
||||
@ -404,6 +404,35 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure twasminlinenode.second_atomic_rmw_x_y(op: TAsmOp);
|
||||
begin
|
||||
secondpass(tcallparanode(tcallparanode(left).right).left);
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,
|
||||
tcallparanode(tcallparanode(left).right).left.location,
|
||||
tcallparanode(tcallparanode(left).right).left.resultdef,
|
||||
tcallparanode(tcallparanode(left).right).left.resultdef,false);
|
||||
thlcgwasm(hlcg).a_load_reg_stack(current_asmdata.CurrAsmList,
|
||||
tcallparanode(tcallparanode(left).right).left.resultdef,
|
||||
tcallparanode(tcallparanode(left).right).left.location.register);
|
||||
|
||||
secondpass(tcallparanode(left).left);
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,
|
||||
tcallparanode(left).left.location,
|
||||
tcallparanode(left).left.resultdef,
|
||||
tcallparanode(left).left.resultdef,false);
|
||||
thlcgwasm(hlcg).a_load_reg_stack(current_asmdata.CurrAsmList,
|
||||
tcallparanode(left).left.resultdef,
|
||||
tcallparanode(left).left.location.register);
|
||||
|
||||
current_asmdata.CurrAsmList.Concat(taicpu.op_const(op,0));
|
||||
thlcgwasm(hlcg).decstack(current_asmdata.CurrAsmList,1);
|
||||
|
||||
location_reset(location,LOC_REGISTER,def_cgsize(resultdef));
|
||||
location.register:=hlcg.getregisterfordef(current_asmdata.CurrAsmList,resultdef);
|
||||
thlcgwasm(hlcg).a_load_stack_loc(current_asmdata.CurrAsmList,resultdef,location);
|
||||
end;
|
||||
|
||||
|
||||
function twasminlinenode.first_sqr_real: tnode;
|
||||
begin
|
||||
expectloc:=LOC_FPUREGISTER;
|
||||
@ -450,6 +479,57 @@ implementation
|
||||
CheckParameters(0);
|
||||
resultdef:=voidtype;
|
||||
end;
|
||||
|
||||
in_wasm32_i32_atomic_rmw8_add_u,
|
||||
in_wasm32_i32_atomic_rmw16_add_u,
|
||||
in_wasm32_i32_atomic_rmw_add,
|
||||
in_wasm32_i32_atomic_rmw8_sub_u,
|
||||
in_wasm32_i32_atomic_rmw16_sub_u,
|
||||
in_wasm32_i32_atomic_rmw_sub,
|
||||
in_wasm32_i32_atomic_rmw8_and_u,
|
||||
in_wasm32_i32_atomic_rmw16_and_u,
|
||||
in_wasm32_i32_atomic_rmw_and,
|
||||
in_wasm32_i32_atomic_rmw8_or_u,
|
||||
in_wasm32_i32_atomic_rmw16_or_u,
|
||||
in_wasm32_i32_atomic_rmw_or,
|
||||
in_wasm32_i32_atomic_rmw8_xor_u,
|
||||
in_wasm32_i32_atomic_rmw16_xor_u,
|
||||
in_wasm32_i32_atomic_rmw_xor,
|
||||
in_wasm32_i32_atomic_rmw8_xchg_u,
|
||||
in_wasm32_i32_atomic_rmw16_xchg_u,
|
||||
in_wasm32_i32_atomic_rmw_xchg:
|
||||
begin
|
||||
CheckParameters(2);
|
||||
resultdef:=u32inttype;
|
||||
end;
|
||||
in_wasm32_i64_atomic_rmw8_add_u,
|
||||
in_wasm32_i64_atomic_rmw16_add_u,
|
||||
in_wasm32_i64_atomic_rmw32_add_u,
|
||||
in_wasm32_i64_atomic_rmw_add,
|
||||
in_wasm32_i64_atomic_rmw8_sub_u,
|
||||
in_wasm32_i64_atomic_rmw16_sub_u,
|
||||
in_wasm32_i64_atomic_rmw32_sub_u,
|
||||
in_wasm32_i64_atomic_rmw_sub,
|
||||
in_wasm32_i64_atomic_rmw8_and_u,
|
||||
in_wasm32_i64_atomic_rmw16_and_u,
|
||||
in_wasm32_i64_atomic_rmw32_and_u,
|
||||
in_wasm32_i64_atomic_rmw_and,
|
||||
in_wasm32_i64_atomic_rmw8_or_u,
|
||||
in_wasm32_i64_atomic_rmw16_or_u,
|
||||
in_wasm32_i64_atomic_rmw32_or_u,
|
||||
in_wasm32_i64_atomic_rmw_or,
|
||||
in_wasm32_i64_atomic_rmw8_xor_u,
|
||||
in_wasm32_i64_atomic_rmw16_xor_u,
|
||||
in_wasm32_i64_atomic_rmw32_xor_u,
|
||||
in_wasm32_i64_atomic_rmw_xor,
|
||||
in_wasm32_i64_atomic_rmw8_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw16_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw32_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw_xchg:
|
||||
begin
|
||||
CheckParameters(2);
|
||||
resultdef:=u64inttype;
|
||||
end;
|
||||
else
|
||||
Result:=inherited pass_typecheck_cpu;
|
||||
end;
|
||||
@ -469,6 +549,49 @@ implementation
|
||||
in_wasm32_throw_fpcexception,
|
||||
in_wasm32_atomic_fence:
|
||||
expectloc:=LOC_VOID;
|
||||
in_wasm32_i32_atomic_rmw8_add_u,
|
||||
in_wasm32_i32_atomic_rmw16_add_u,
|
||||
in_wasm32_i32_atomic_rmw_add,
|
||||
in_wasm32_i64_atomic_rmw8_add_u,
|
||||
in_wasm32_i64_atomic_rmw16_add_u,
|
||||
in_wasm32_i64_atomic_rmw32_add_u,
|
||||
in_wasm32_i64_atomic_rmw_add,
|
||||
in_wasm32_i32_atomic_rmw8_sub_u,
|
||||
in_wasm32_i32_atomic_rmw16_sub_u,
|
||||
in_wasm32_i32_atomic_rmw_sub,
|
||||
in_wasm32_i64_atomic_rmw8_sub_u,
|
||||
in_wasm32_i64_atomic_rmw16_sub_u,
|
||||
in_wasm32_i64_atomic_rmw32_sub_u,
|
||||
in_wasm32_i64_atomic_rmw_sub,
|
||||
in_wasm32_i32_atomic_rmw8_and_u,
|
||||
in_wasm32_i32_atomic_rmw16_and_u,
|
||||
in_wasm32_i32_atomic_rmw_and,
|
||||
in_wasm32_i64_atomic_rmw8_and_u,
|
||||
in_wasm32_i64_atomic_rmw16_and_u,
|
||||
in_wasm32_i64_atomic_rmw32_and_u,
|
||||
in_wasm32_i64_atomic_rmw_and,
|
||||
in_wasm32_i32_atomic_rmw8_or_u,
|
||||
in_wasm32_i32_atomic_rmw16_or_u,
|
||||
in_wasm32_i32_atomic_rmw_or,
|
||||
in_wasm32_i64_atomic_rmw8_or_u,
|
||||
in_wasm32_i64_atomic_rmw16_or_u,
|
||||
in_wasm32_i64_atomic_rmw32_or_u,
|
||||
in_wasm32_i64_atomic_rmw_or,
|
||||
in_wasm32_i32_atomic_rmw8_xor_u,
|
||||
in_wasm32_i32_atomic_rmw16_xor_u,
|
||||
in_wasm32_i32_atomic_rmw_xor,
|
||||
in_wasm32_i64_atomic_rmw8_xor_u,
|
||||
in_wasm32_i64_atomic_rmw16_xor_u,
|
||||
in_wasm32_i64_atomic_rmw32_xor_u,
|
||||
in_wasm32_i64_atomic_rmw_xor,
|
||||
in_wasm32_i32_atomic_rmw8_xchg_u,
|
||||
in_wasm32_i32_atomic_rmw16_xchg_u,
|
||||
in_wasm32_i32_atomic_rmw_xchg,
|
||||
in_wasm32_i64_atomic_rmw8_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw16_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw32_xchg_u,
|
||||
in_wasm32_i64_atomic_rmw_xchg:
|
||||
expectloc:=LOC_REGISTER;
|
||||
else
|
||||
Result:=inherited first_cpu;
|
||||
end;
|
||||
@ -492,6 +615,90 @@ implementation
|
||||
second_throw_fpcexception;
|
||||
in_wasm32_atomic_fence:
|
||||
second_atomic_fence;
|
||||
in_wasm32_i32_atomic_rmw8_add_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_add_u);
|
||||
in_wasm32_i32_atomic_rmw16_add_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_add_u);
|
||||
in_wasm32_i32_atomic_rmw_add:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_add);
|
||||
in_wasm32_i64_atomic_rmw8_add_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_add_u);
|
||||
in_wasm32_i64_atomic_rmw16_add_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_add_u);
|
||||
in_wasm32_i64_atomic_rmw32_add_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_add_u);
|
||||
in_wasm32_i64_atomic_rmw_add:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_add);
|
||||
in_wasm32_i32_atomic_rmw8_sub_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_sub_u);
|
||||
in_wasm32_i32_atomic_rmw16_sub_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_sub_u);
|
||||
in_wasm32_i32_atomic_rmw_sub:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_sub);
|
||||
in_wasm32_i64_atomic_rmw8_sub_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_sub_u);
|
||||
in_wasm32_i64_atomic_rmw16_sub_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_sub_u);
|
||||
in_wasm32_i64_atomic_rmw32_sub_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_sub_u);
|
||||
in_wasm32_i64_atomic_rmw_sub:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_sub);
|
||||
in_wasm32_i32_atomic_rmw8_and_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_and_u);
|
||||
in_wasm32_i32_atomic_rmw16_and_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_and_u);
|
||||
in_wasm32_i32_atomic_rmw_and:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_and);
|
||||
in_wasm32_i64_atomic_rmw8_and_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_and_u);
|
||||
in_wasm32_i64_atomic_rmw16_and_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_and_u);
|
||||
in_wasm32_i64_atomic_rmw32_and_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_and_u);
|
||||
in_wasm32_i64_atomic_rmw_and:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_and);
|
||||
in_wasm32_i32_atomic_rmw8_or_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_or_u);
|
||||
in_wasm32_i32_atomic_rmw16_or_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_or_u);
|
||||
in_wasm32_i32_atomic_rmw_or:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_or);
|
||||
in_wasm32_i64_atomic_rmw8_or_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_or_u);
|
||||
in_wasm32_i64_atomic_rmw16_or_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_or_u);
|
||||
in_wasm32_i64_atomic_rmw32_or_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_or_u);
|
||||
in_wasm32_i64_atomic_rmw_or:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_or);
|
||||
in_wasm32_i32_atomic_rmw8_xor_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_xor_u);
|
||||
in_wasm32_i32_atomic_rmw16_xor_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_xor_u);
|
||||
in_wasm32_i32_atomic_rmw_xor:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_xor);
|
||||
in_wasm32_i64_atomic_rmw8_xor_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_xor_u);
|
||||
in_wasm32_i64_atomic_rmw16_xor_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_xor_u);
|
||||
in_wasm32_i64_atomic_rmw32_xor_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_xor_u);
|
||||
in_wasm32_i64_atomic_rmw_xor:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_xor);
|
||||
in_wasm32_i32_atomic_rmw8_xchg_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw8_xchg_u);
|
||||
in_wasm32_i32_atomic_rmw16_xchg_u:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw16_xchg_u);
|
||||
in_wasm32_i32_atomic_rmw_xchg:
|
||||
second_atomic_rmw_x_y(a_i32_atomic_rmw_xchg);
|
||||
in_wasm32_i64_atomic_rmw8_xchg_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw8_xchg_u);
|
||||
in_wasm32_i64_atomic_rmw16_xchg_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw16_xchg_u);
|
||||
in_wasm32_i64_atomic_rmw32_xchg_u:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw32_xchg_u);
|
||||
in_wasm32_i64_atomic_rmw_xchg:
|
||||
second_atomic_rmw_x_y(a_i64_atomic_rmw_xchg);
|
||||
else
|
||||
inherited pass_generate_code_cpu;
|
||||
end;
|
||||
|
@ -24,3 +24,52 @@ procedure fpc_wasm32_throw_fpcexception;[internproc:fpc_in_wasm32_throw_fpcexcep
|
||||
procedure fpc_wasm32_memory_fill(d,val,n: longword);[internproc:fpc_in_wasm32_memory_fill];
|
||||
procedure fpc_wasm32_memory_copy(d,s,n: longword);[internproc:fpc_in_wasm32_memory_copy];
|
||||
procedure fpc_wasm32_atomic_fence;[internproc:fpc_in_wasm32_atomic_fence];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_add_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_add_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_add_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_add_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_add(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_add];
|
||||
function fpc_wasm32_i64_atomic_rmw8_add_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_add_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_add_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_add_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_add_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_add];
|
||||
function fpc_wasm32_i64_atomic_rmw_add(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_add];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_sub_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_sub_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_sub_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_sub_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_sub(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_sub];
|
||||
function fpc_wasm32_i64_atomic_rmw8_sub_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_sub_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_sub_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_sub_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_sub_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_sub];
|
||||
function fpc_wasm32_i64_atomic_rmw_sub(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_sub];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_and_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_and_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_and_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_and_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_and(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_and];
|
||||
function fpc_wasm32_i64_atomic_rmw8_and_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_and_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_and_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_and_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_and_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_and];
|
||||
function fpc_wasm32_i64_atomic_rmw_and(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_and];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_or_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_or_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_or_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_or_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_or(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_or];
|
||||
function fpc_wasm32_i64_atomic_rmw8_or_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_or_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_or_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_or_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_or_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_or];
|
||||
function fpc_wasm32_i64_atomic_rmw_or(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_or];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_xor_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_xor_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_xor_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_xor_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_xor(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_xor];
|
||||
function fpc_wasm32_i64_atomic_rmw8_xor_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_xor_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_xor_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_xor_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_xor_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_xor];
|
||||
function fpc_wasm32_i64_atomic_rmw_xor(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_xor];
|
||||
|
||||
function fpc_wasm32_i32_atomic_rmw8_xchg_u(Dest: PByte; x: Byte): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw8_xchg_u];
|
||||
function fpc_wasm32_i32_atomic_rmw16_xchg_u(Dest: PWord; x: Word): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw16_xchg_u];
|
||||
function fpc_wasm32_i32_atomic_rmw_xchg(Dest: PLongWord; x: LongWord): longword;[internproc:fpc_in_wasm32_i32_atomic_rmw_xchg];
|
||||
function fpc_wasm32_i64_atomic_rmw8_xchg_u(Dest: PByte; x: Byte): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw8_xchg_u];
|
||||
function fpc_wasm32_i64_atomic_rmw16_xchg_u(Dest: PWord; x: Word): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw16_xchg_u];
|
||||
function fpc_wasm32_i64_atomic_rmw32_xchg_u(Dest: PLongWord; x: LongWord): qword;[internproc:fpc_in_wasm32_i64_atomic_rmw_xchg];
|
||||
function fpc_wasm32_i64_atomic_rmw_xchg(Dest: PQWord; x: QWord): QWord;[internproc:fpc_in_wasm32_i64_atomic_rmw_xchg];
|
||||
|
||||
|
@ -19,3 +19,52 @@
|
||||
fpc_in_wasm32_memory_copy = fpc_in_cpu_first+4;
|
||||
fpc_in_wasm32_memory_fill = fpc_in_cpu_first+5;
|
||||
fpc_in_wasm32_atomic_fence = fpc_in_cpu_first+6;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_add_u = fpc_in_cpu_first+7;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_add_u = fpc_in_cpu_first+8;
|
||||
fpc_in_wasm32_i32_atomic_rmw_add = fpc_in_cpu_first+9;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_add_u = fpc_in_cpu_first+10;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_add_u = fpc_in_cpu_first+11;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_add_u = fpc_in_cpu_first+12;
|
||||
fpc_in_wasm32_i64_atomic_rmw_add = fpc_in_cpu_first+13;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_sub_u = fpc_in_cpu_first+14;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_sub_u = fpc_in_cpu_first+15;
|
||||
fpc_in_wasm32_i32_atomic_rmw_sub = fpc_in_cpu_first+16;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_sub_u = fpc_in_cpu_first+17;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_sub_u = fpc_in_cpu_first+18;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_sub_u = fpc_in_cpu_first+19;
|
||||
fpc_in_wasm32_i64_atomic_rmw_sub = fpc_in_cpu_first+20;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_and_u = fpc_in_cpu_first+21;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_and_u = fpc_in_cpu_first+22;
|
||||
fpc_in_wasm32_i32_atomic_rmw_and = fpc_in_cpu_first+23;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_and_u = fpc_in_cpu_first+24;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_and_u = fpc_in_cpu_first+25;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_and_u = fpc_in_cpu_first+26;
|
||||
fpc_in_wasm32_i64_atomic_rmw_and = fpc_in_cpu_first+27;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_or_u = fpc_in_cpu_first+28;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_or_u = fpc_in_cpu_first+29;
|
||||
fpc_in_wasm32_i32_atomic_rmw_or = fpc_in_cpu_first+30;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_or_u = fpc_in_cpu_first+31;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_or_u = fpc_in_cpu_first+32;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_or_u = fpc_in_cpu_first+33;
|
||||
fpc_in_wasm32_i64_atomic_rmw_or = fpc_in_cpu_first+34;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_xor_u = fpc_in_cpu_first+35;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_xor_u = fpc_in_cpu_first+36;
|
||||
fpc_in_wasm32_i32_atomic_rmw_xor = fpc_in_cpu_first+37;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_xor_u = fpc_in_cpu_first+38;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_xor_u = fpc_in_cpu_first+39;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_xor_u = fpc_in_cpu_first+40;
|
||||
fpc_in_wasm32_i64_atomic_rmw_xor = fpc_in_cpu_first+41;
|
||||
|
||||
fpc_in_wasm32_i32_atomic_rmw8_xchg_u = fpc_in_cpu_first+42;
|
||||
fpc_in_wasm32_i32_atomic_rmw16_xchg_u = fpc_in_cpu_first+43;
|
||||
fpc_in_wasm32_i32_atomic_rmw_xchg = fpc_in_cpu_first+44;
|
||||
fpc_in_wasm32_i64_atomic_rmw8_xchg_u = fpc_in_cpu_first+45;
|
||||
fpc_in_wasm32_i64_atomic_rmw16_xchg_u = fpc_in_cpu_first+46;
|
||||
fpc_in_wasm32_i64_atomic_rmw32_xchg_u = fpc_in_cpu_first+47;
|
||||
fpc_in_wasm32_i64_atomic_rmw_xchg = fpc_in_cpu_first+48;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user