+ 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:
Nikolay Nikolov 2022-05-20 17:36:37 +03:00
parent c5a443d0dd
commit d8f06aa4f1
4 changed files with 356 additions and 3 deletions

View File

@ -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

View File

@ -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;

View File

@ -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];

View File

@ -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;