您当前的位置: 首页 >  Java

TeaVM编译JAVA为Wasm的原理

柳鲲鹏 发布时间:2021-06-01 14:58:52 ,浏览量:0

   分两步:

  • 先把JAVA class翻译为Wasm C的文本格式。
  • 再对Wasm C进行编译,产生正式的wasm文件。

举例说明。

源码:

    @Export(name = "layoutJs2Java")
    public static int[] layoutJs2Java() {
        int[] intarray = new int[]{5, 8};
        return intarray;
    }

中间代码

int32_t layoutJs2Java() {
    int32_t _intarray;
    int32_t localVar1;
    int32_t ___stack__;
    ___stack__ = meth_otbw_WasmRuntime_allocStack(INT32_C(0));
    if (((*((int32_t *) &wasm_heap[INT32_C(468) + 0]) & INT32_C(1)) == INT32_C(0))) {
        *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(12);
        initclass_tw_WasmBenchmarkStarter();
        if ((*((int32_t *) &wasm_heap[___stack__ + 0]) != INT32_C(12))) {
            goto block_0;
        }
    }
    *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(11);
    _intarray = meth_otr_Allocator_allocateArray(INT32_C(15040), INT32_C(2));
    if ((*((int32_t *) &wasm_heap[___stack__ + 0]) == INT32_C(11))) {
        localVar1 = _intarray;
        if ((INT32_C(0) >= *((int32_t *) &wasm_heap[(localVar1 + INT32_C(8)) + 0]))) {
            *((int32_t *) &wasm_heap[___stack__ + 0]) = INT32_C(13);
            teavm_throwArrayIndexOutOfBoundsException();
        } else {
            *((int32_t *) &wasm_heap[((localVar1 + INT32_C(12)) + (INT32_C(0)             
关注
打赏
1688896170
查看更多评论
0.0487s