Hi,

I started playing with the current wasm implementation and there are some 
things that are not clear for me.

If I compile this wast i get the expected result:

(module
  (func $add (param $x f32) (param $y f32) (result f32) (f32.add (get_local 
$x) (get_local $y)))
  (export "add" (func $add))
)

module = Wasm.instantiateModule(new Uint8Array(buffer), {});
module.exports.add(1,2) // => 3

But when I try to compile from C, I get an exception "Error: memory access 
out of bounds"

This is the C source:

double add(double a, double b) { return a + b; }

Fist I compile it to llvm ir:

; ModuleID = 'sample.c'
source_filename = "sample.c"
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32"

; Function Attrs: nounwind
define hidden double @add(double %a, double %b) #0 {
entry:
  %a.addr = alloca double, align 8
  %b.addr = alloca double, align 8
  store double %a, double* %a.addr, align 8
  store double %b, double* %b.addr, align 8
  %0 = load double, double* %a.addr, align 8
  %1 = load double, double* %b.addr, align 8
  %add = fadd double %0, %1
  ret double %add
}

attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" 
"disable-tail-calls"="false" "less-precise-fpmad"="false" 
"no-frame-pointer-elim"="false" "no-infs-fp-math"="false" 
"no-jump-tables"="false" "no-nans-fp-math"="false" 
"no-signed-zeros-fp-math"="false" "no-trapping-math"="false" 
"stack-protector-buffer-size"="8" "target-cpu"="generic" 
"unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.ident = !{!0}

!0 = !{!"clang version 4.0.0 (http://llvm.org/git/clang.git 
b1b3141a30d56f4feb3cc68f57d1ebaf6fbad246) (http://llvm.org/git/llvm.git 
cf04e5f0f84bd44c375bf866d777708df39935df)"}


Then to .s:

.text
.file "sample.ll"
.hidden add
.globl add
.type add,@function
add:                                    # @add
.param   f64, f64
.result f64
.local   i32
# BB#0:                                 # %entry
i32.const $push2=, 0
i32.load $push3=, __stack_pointer($pop2)
i32.const $push4=, 16
i32.sub $push6=, $pop3, $pop4
tee_local $push5=, $2=, $pop6
f64.store $drop=, 8($pop5), $0
f64.store $drop=, 0($2), $1
f64.load $push0=, 8($2)
f64.add $push1=, $pop0, $1
                                        # fallthrough-return: $pop1
.endfunc
.Lfunc_end0:
.size add, .Lfunc_end0-add


.ident "clang version 4.0.0 (http://llvm.org/git/clang.git 
b1b3141a30d56f4feb3cc68f57d1ebaf6fbad246) (http://llvm.org/git/llvm.git 
cf04e5f0f84bd44c375bf866d777708df39935df)"


Then i use binaryen s2wast:

(module
  (memory $0 1)
  (export "memory" (memory $0))
  (export "add" (func $add))
  (table 0 anyfunc)
  
  (func $add (param $0 f64) (param $1 f64) (result f64)
    (local $2 i32)
    (f64.store offset=8
      (tee_local $2
        (i32.sub
          (i32.load offset=4
            (i32.const 0)
          )
          (i32.const 16)
        )
      )
      (get_local $0)
    )
    (f64.store
      (get_local $2)
      (get_local $1)
    )
    (f64.add
      (f64.load offset=8
        (get_local $2)
      )
      (get_local $1)
    )
  )
)

And finally use wabt to get wasm file.

If I try to run the result in Chrome Canary i get  "Error: memory access 
out of bounds"

My goal is to be able to pass ArrayBuffers and other args from JS to wasm 
module and to be able to write the code in C. Can someone help me to solve 
this issue and maybe point to some useful resources. At this moment it is 
hard to find any working examples.

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to