Add atomic definitions (#524)

This commit is contained in:
Daniel Wirtz
2019-03-02 10:14:09 +01:00
committed by GitHub
parent f3aa762ccb
commit 8e5b9c734b
11 changed files with 1886 additions and 402 deletions

View File

@ -48,18 +48,24 @@
export namespace atomic {
@builtin export declare function load<T>(offset: usize, immOffset?: usize): T;
@builtin export declare function store<T>(offset: usize, value: void, immOffset?: usize): void;
@builtin export declare function store<T>(offset: usize, value: T, immOffset?: usize): void;
@builtin export declare function add<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function sub<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function and<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function or<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function xor<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function xchg<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function cmpxchg<T>(ptr: usize, expected:T, replacement: T, immOffset?: usize): T;
@builtin export declare function wait<T>(ptr: usize, expected:T, timeout:i64): i32;
@builtin export declare function cmpxchg<T>(ptr: usize, expected: T, replacement: T, immOffset?: usize): T;
@builtin export declare function wait<T>(ptr: usize, expected: T, timeout: i64): AtomicWaitResult;
@builtin export declare function notify<T>(ptr: usize, count: u32): u32;
}
@lazy export const enum AtomicWaitResult {
OK = 0,
NOT_EQUAL = 1,
TIMED_OUT = 2
}
@builtin export declare function i8(value: void): i8;
export namespace i8 {
@lazy export const MIN_VALUE: i8 = -128;
@ -92,37 +98,33 @@ export namespace i32 {
@builtin export declare function store(offset: usize, value: i32, immOffset?: usize, immAlign?: usize): void;
export namespace atomic {
@builtin export declare function load8_s(offset: usize, immOffset?: usize): i32;
@builtin export declare function load8_u(offset: usize, immOffset?: usize): i32;
@builtin export declare function load16_s(offset: usize, immOffset?: usize): i32;
@builtin export declare function load16_u(offset: usize, immOffset?: usize): i32;
@builtin export declare function load(offset: usize, immOffset?: usize): i32;
@builtin export declare function store8(offset: usize, value: i32, immOffset?: usize): void;
@builtin export declare function store16(offset: usize, value: i32, immOffset?: usize): void;
@builtin export declare function store(offset: usize, value: i32, immOffset?: usize): void;
@builtin export declare function wait(ptr: usize, expected:i32, timeout:i64): i32;
@builtin export declare function notify(ptr: usize, count:u32): u32;
@builtin export declare function wait(ptr: usize, expected: i32, timeout: i64): AtomicWaitResult;
@builtin export declare function notify(ptr: usize, count: i32): i32;
export namespace rmw8_u {
@builtin export declare function add(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function sub(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function and(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function or(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xor(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xchg(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg(offset: usize, expected:i32, replacement: i32, immOffset?: usize): i32;
export namespace rmw8 {
@builtin export declare function add_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function sub_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function and_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function or_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xor_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xchg_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg_u(offset: usize, expected: i32, replacement: i32, immOffset?: usize): i32;
}
export namespace rmw16_u {
@builtin export declare function add(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function sub(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function and(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function or(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xor(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xchg(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg(offset: usize, expected:i32, replacement: i32, immOffset?: usize): i32;
export namespace rmw16 {
@builtin export declare function add_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function sub_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function and_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function or_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xor_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xchg_u(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg_u(offset: usize, expected: i32, replacement: i32, immOffset?: usize): i32;
}
export namespace rmw {
@builtin export declare function add(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function sub(offset: usize, value: i32, immOffset?: usize): i32;
@ -130,7 +132,7 @@ export namespace i32 {
@builtin export declare function or(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xor(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function xchg(offset: usize, value: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg(offset: usize, expected:i32, replacement: i32, immOffset?: usize): i32;
@builtin export declare function cmpxchg(offset: usize, expected: i32, replacement: i32, immOffset?: usize): i32;
}
}
}
@ -142,11 +144,11 @@ export namespace i64 {
@builtin export declare function clz(value: i64): i64;
@builtin export declare function ctz(value: i64): i64;
@builtin export declare function load8_s(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load8_u(offset: usize, immOffset?: usize, immAlign?: usize): u64;
@builtin export declare function load8_u(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load16_s(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load16_u(offset: usize, immOffset?: usize, immAlign?: usize): u64;
@builtin export declare function load16_u(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load32_s(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load32_u(offset: usize, immOffset?: usize, immAlign?: usize): u64;
@builtin export declare function load32_u(offset: usize, immOffset?: usize, immAlign?: usize): i64;
@builtin export declare function load(offset: usize, immOffset?: usize): i64;
@builtin export declare function popcnt(value: i64): i64;
@builtin export declare function rotl(value: i64, shift: i64): i64;
@ -157,48 +159,45 @@ export namespace i64 {
@builtin export declare function store32(offset: usize, value: i64, immOffset?: usize, immAlign?: usize): void;
@builtin export declare function store(offset: usize, value: i64, immOffset?: usize, immAlign?: usize): void;
namespace atomic {
@builtin export declare function load8_s(offset: usize, immOffset?: usize): i64;
export namespace atomic {
@builtin export declare function load8_u(offset: usize, immOffset?: usize): i64;
@builtin export declare function load16_s(offset: usize, immOffset?: usize): i64;
@builtin export declare function load16_u(offset: usize, immOffset?: usize): i64;
@builtin export declare function load32_u(offset: usize, immOffset?: usize): i64;
@builtin export declare function load(offset: usize, immOffset?: usize): i64;
@builtin export declare function store8(offset: usize, value: i64, immOffset?: usize): void;
@builtin export declare function store16(offset: usize, value: i64, immOffset?: usize): void;
@builtin export declare function store32(offset: usize, value: i64, immOffset?: usize): void;
@builtin export declare function store(offset: usize, value: i64, immOffset?: usize): void;
@builtin export declare function wait(ptr: usize, expected:i64, timeout:i64): i32;
@builtin export declare function notify(ptr: usize, count:u32): u32;
@builtin export declare function wait(ptr: usize, expected: i64, timeout: i64): AtomicWaitResult;
@builtin export declare function notify(ptr: usize, count: i32): i32;
export namespace rmw8_u {
@builtin export declare function add(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg(offset: usize, expected:i64, replacement: i64, immOffset?: usize): i64;
export namespace rmw8 {
@builtin export declare function add_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg_u(offset: usize, expected: i64, replacement: i64, immOffset?: usize): i64;
}
export namespace rmw16_u {
@builtin export declare function add(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg(offset: usize, expected:i64, replacement: i64, immOffset?: usize): i64;
export namespace rmw16 {
@builtin export declare function add_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg_u(offset: usize, expected: i64, replacement: i64, immOffset?: usize): i64;
}
export namespace rmw32_u {
@builtin export declare function add(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg(offset: usize, expected:i64, replacement: i64, immOffset?: usize): i64;
export namespace rmw32 {
@builtin export declare function add_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function and_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function or_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg_u(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg_u(offset: usize, expected: i64, replacement: i64, immOffset?: usize): i64;
}
export namespace rmw {
@builtin export declare function add(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function sub(offset: usize, value: i64, immOffset?: usize): i64;
@ -206,9 +205,9 @@ export namespace i64 {
@builtin export declare function or(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xor(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function xchg(offset: usize, value: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg(offset: usize, expected:i64, replacement: i64, immOffset?: usize): i64;
@builtin export declare function cmpxchg(offset: usize, expected: i64, replacement: i64, immOffset?: usize): i64;
}
}
}
}
@builtin export declare function isize(value: void): isize;