github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/integration_test/spectest/v2/testdata/endianness.wast (about)

     1  (module
     2    (memory 1)
     3  
     4    ;; Stores an i16 value in little-endian-format
     5    (func $i16_store_little (param $address i32) (param $value i32)
     6      (i32.store8 (local.get $address) (local.get $value))
     7      (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8)))
     8    )
     9  
    10    ;; Stores an i32 value in little-endian format
    11    (func $i32_store_little (param $address i32) (param $value i32)
    12      (call $i16_store_little (local.get $address) (local.get $value))
    13      (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16)))
    14    )
    15  
    16    ;; Stores an i64 value in little-endian format
    17    (func $i64_store_little (param $address i32) (param $value i64)
    18      (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value)))
    19      (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32))))
    20    )
    21  
    22    ;; Loads an i16 value in little-endian format
    23    (func $i16_load_little (param $address i32) (result i32)
    24      (i32.or
    25        (i32.load8_u (local.get $address))
    26        (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8))
    27      )
    28    )
    29  
    30    ;; Loads an i32 value in little-endian format
    31    (func $i32_load_little (param $address i32) (result i32)
    32      (i32.or
    33        (call $i16_load_little (local.get $address))
    34        (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16))
    35      )
    36    )
    37  
    38    ;; Loads an i64 value in little-endian format
    39    (func $i64_load_little (param $address i32) (result i64)
    40      (i64.or
    41        (i64.extend_i32_u (call $i32_load_little (local.get $address)))
    42        (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32))
    43      )
    44    )
    45  
    46    (func (export "i32_load16_s") (param $value i32) (result i32)
    47      (call $i16_store_little (i32.const 0) (local.get $value))
    48      (i32.load16_s (i32.const 0))
    49    )
    50  
    51    (func (export "i32_load16_u") (param $value i32) (result i32)
    52      (call $i16_store_little (i32.const 0) (local.get $value))
    53      (i32.load16_u (i32.const 0))
    54    )
    55  
    56    (func (export "i32_load") (param $value i32) (result i32)
    57      (call $i32_store_little (i32.const 0) (local.get $value))
    58      (i32.load (i32.const 0))
    59    )
    60  
    61    (func (export "i64_load16_s") (param $value i64) (result i64)
    62      (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value)))
    63      (i64.load16_s (i32.const 0))
    64    )
    65  
    66    (func (export "i64_load16_u") (param $value i64) (result i64)
    67      (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value)))
    68      (i64.load16_u (i32.const 0))
    69    )
    70  
    71    (func (export "i64_load32_s") (param $value i64) (result i64)
    72      (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value)))
    73      (i64.load32_s (i32.const 0))
    74    )
    75  
    76    (func (export "i64_load32_u") (param $value i64) (result i64)
    77      (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value)))
    78      (i64.load32_u (i32.const 0))
    79    )
    80  
    81    (func (export "i64_load") (param $value i64) (result i64)
    82      (call $i64_store_little (i32.const 0) (local.get $value))
    83      (i64.load (i32.const 0))
    84    )
    85  
    86    (func (export "f32_load") (param $value f32) (result f32)
    87      (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value)))
    88      (f32.load (i32.const 0))
    89    )
    90  
    91    (func (export "f64_load") (param $value f64) (result f64)
    92      (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value)))
    93      (f64.load (i32.const 0))
    94    )
    95  
    96  
    97    (func (export "i32_store16") (param $value i32) (result i32)
    98      (i32.store16 (i32.const 0) (local.get $value))
    99      (call $i16_load_little (i32.const 0))
   100    )
   101  
   102    (func (export "i32_store") (param $value i32) (result i32)
   103      (i32.store (i32.const 0) (local.get $value))
   104      (call $i32_load_little (i32.const 0))
   105    )
   106  
   107    (func (export "i64_store16") (param $value i64) (result i64)
   108      (i64.store16 (i32.const 0) (local.get $value))
   109      (i64.extend_i32_u (call $i16_load_little (i32.const 0)))
   110    )
   111  
   112    (func (export "i64_store32") (param $value i64) (result i64)
   113      (i64.store32 (i32.const 0) (local.get $value))
   114      (i64.extend_i32_u (call $i32_load_little (i32.const 0)))
   115    )
   116  
   117    (func (export "i64_store") (param $value i64) (result i64)
   118      (i64.store (i32.const 0) (local.get $value))
   119      (call $i64_load_little (i32.const 0))
   120    )
   121  
   122    (func (export "f32_store") (param $value f32) (result f32)
   123      (f32.store (i32.const 0) (local.get $value))
   124      (f32.reinterpret_i32 (call $i32_load_little (i32.const 0)))
   125    )
   126  
   127    (func (export "f64_store") (param $value f64) (result f64)
   128      (f64.store (i32.const 0) (local.get $value))
   129      (f64.reinterpret_i64 (call $i64_load_little (i32.const 0)))
   130    )
   131  )
   132  
   133  (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1))
   134  (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242))
   135  (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42))
   136  (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210))
   137  
   138  (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF))
   139  (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294))
   140  (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42))
   141  (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE))
   142  
   143  (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1))
   144  (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242))
   145  (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242))
   146  (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA))
   147  
   148  (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1))
   149  (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242))
   150  (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42))
   151  (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210))
   152  
   153  (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF))
   154  (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294))
   155  (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42))
   156  (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE))
   157  
   158  (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1))
   159  (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242))
   160  (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242))
   161  (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678))
   162  
   163  (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF))
   164  (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054))
   165  (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242))
   166  (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
   167  
   168  (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1))
   169  (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242))
   170  (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
   171  (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA))
   172  
   173  (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1))
   174  (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5))
   175  (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242))
   176  (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127))
   177  
   178  (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1))
   179  (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5))
   180  (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242))
   181  (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023))
   182  
   183  
   184  (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF))
   185  (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294))
   186  (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42))
   187  (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE))
   188  
   189  (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1))
   190  (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242))
   191  (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242))
   192  (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE))
   193  
   194  (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF))
   195  (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294))
   196  (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42))
   197  (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE))
   198  
   199  (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF))
   200  (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054))
   201  (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242))
   202  (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE))
   203  
   204  (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1))
   205  (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242))
   206  (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
   207  (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA))
   208  
   209  (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1))
   210  (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5))
   211  (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242))
   212  (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127))
   213  
   214  (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1))
   215  (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5))
   216  (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242))
   217  (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023))