5
5
6
6
#include <stdint.h>
7
7
#include <wasm_simd128.h>
8
- #include <__macro_PAGESIZE.h>
9
8
10
9
#ifdef __cplusplus
11
10
extern "C" {
@@ -244,16 +243,16 @@ char *strrchr(const char *s, int c) {
244
243
// http://0x80.pl/notesen/2018-10-18-simd-byte-lookup.html
245
244
246
245
typedef struct {
247
- __u8x16 l ;
248
- __u8x16 h ;
246
+ __u8x16 lo ;
247
+ __u8x16 hi ;
249
248
} __wasm_v128_bitmap256_t ;
250
249
251
250
__attribute__((always_inline ))
252
251
static void __wasm_v128_setbit (__wasm_v128_bitmap256_t * bitmap , int i ) {
253
252
uint8_t hi_nibble = (uint8_t )i >> 4 ;
254
253
uint8_t lo_nibble = (uint8_t )i & 0xf ;
255
- bitmap -> l [lo_nibble ] |= 1 << (hi_nibble - 0 );
256
- bitmap -> h [lo_nibble ] |= 1 << (hi_nibble - 8 );
254
+ bitmap -> lo [lo_nibble ] |= ( uint8_t )(( uint32_t ) 1 << (hi_nibble - 0 ) );
255
+ bitmap -> hi [lo_nibble ] |= ( uint8_t )(( uint32_t ) 1 << (hi_nibble - 8 ) );
257
256
}
258
257
259
258
#ifndef __wasm_relaxed_simd__
@@ -272,11 +271,10 @@ static v128_t __wasm_v128_chkbits(__wasm_v128_bitmap256_t bitmap, v128_t v) {
272
271
v128_t indices_0_7 = v & wasm_u8x16_const_splat (0x8f );
273
272
v128_t indices_8_15 = indices_0_7 ^ wasm_u8x16_const_splat (0x80 );
274
273
275
- v128_t row_0_7 = wasm_i8x16_swizzle (bitmap .l , indices_0_7 );
276
- v128_t row_8_15 = wasm_i8x16_swizzle (bitmap .h , indices_8_15 );
274
+ v128_t row_0_7 = wasm_i8x16_swizzle (bitmap .lo , indices_0_7 );
275
+ v128_t row_8_15 = wasm_i8x16_swizzle (bitmap .hi , indices_8_15 );
277
276
278
277
v128_t bitsets = row_0_7 | row_8_15 ;
279
-
280
278
return wasm_i8x16_eq (bitsets & bitmask , bitmask );
281
279
}
282
280
0 commit comments