wasmgen.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include <stdint.h>
  3. typedef struct PackedStr {
  4. uint64_t a;
  5. uint64_t b;
  6. uint64_t c;
  7. } PackedStr;
  8. #define PSTR_TY uint64_t, uint64_t, uint64_t
  9. extern uint8_t* wg_get_code_section(void);
  10. extern uint8_t* wg_get_instruction_body(void);
  11. extern void wg_commit_instruction_body_to_cs(void);
  12. extern void wg_finish(uint8_t no_of_locals_i32);
  13. extern void wg_reset(void);
  14. extern uint16_t wg_get_fn_idx(PSTR_TY, uint8_t fn_type);
  15. extern void wg_push_i32(uint8_t* buf, int32_t v);
  16. extern void wg_push_u32(uint8_t* buf, uint32_t v);
  17. extern void wg_load_aligned_u16(uint8_t* buf, uint32_t addr);
  18. extern void wg_load_aligned_i32(uint8_t* buf, uint32_t addr);
  19. extern void wg_store_aligned_u16(uint8_t* buf);
  20. extern void wg_store_aligned_i32(uint8_t* buf);
  21. extern void wg_add_i32(uint8_t* buf);
  22. extern void wg_and_i32(uint8_t* buf);
  23. extern void wg_or_i32(uint8_t* buf);
  24. extern void wg_shl_i32(uint8_t* buf);
  25. extern void wg_call_fn(uint8_t* buf, uint16_t fn_idx);
  26. extern void wg_call_fn_with_arg(uint8_t* buf, uint16_t fn_idx, int32_t arg0);
  27. extern void wg_eq_i32(uint8_t* buf);
  28. extern void wg_ne_i32(uint8_t* buf);
  29. extern void wg_le_i32(uint8_t* buf);
  30. extern void wg_lt_i32(uint8_t* buf);
  31. extern void wg_ge_i32(uint8_t* buf);
  32. extern void wg_gt_i32(uint8_t* buf);
  33. extern void wg_if_i32(uint8_t* buf);
  34. extern void wg_block_i32(uint8_t* buf);
  35. extern void wg_tee_local(uint8_t* buf, int32_t idx);
  36. extern void wg_xor_i32(uint8_t* buf);
  37. extern void wg_load_unaligned_i32_from_stack(uint8_t* buf, uint32_t byte_offset);
  38. extern void wg_load_aligned_i32_from_stack(uint8_t* buf, uint32_t byte_offset);
  39. extern void wg_store_unaligned_i32(uint8_t* buf, uint32_t byte_offset);
  40. extern void wg_shr_u32(uint8_t* buf);
  41. extern void wg_shr_i32(uint8_t* buf);
  42. extern void wg_eqz_i32(uint8_t* buf);
  43. extern void wg_if_void(uint8_t* buf);
  44. extern void wg_else(uint8_t* buf);
  45. extern void wg_loop_void(uint8_t* buf);
  46. extern void wg_block_void(uint8_t* buf);
  47. extern void wg_block_end(uint8_t* buf);
  48. extern void wg_return(uint8_t* buf);
  49. extern void wg_drop(uint8_t* buf);
  50. extern void wg_brtable_and_cases(uint8_t* buf, int32_t cases_count);
  51. extern void wg_br(uint8_t* buf, int32_t depth);
  52. extern void wg_get_local(uint8_t* buf, int32_t idx);
  53. extern void wg_set_local(uint8_t* buf, int32_t idx);
  54. extern void wg_unreachable(uint8_t* buf);
  55. extern void wg_increment_mem32(uint8_t* buf, int32_t addr);
  56. extern void wg_increment_variable(uint8_t* buf, int32_t addr, int32_t n);
  57. extern void wg_load_aligned_u16_from_stack(uint8_t* buf, uint32_t byte_offset);
  58. extern void wg_fn0_const(uint8_t* buf, PSTR_TY);
  59. extern void wg_fn0_const_ret(uint8_t* buf, PSTR_TY);
  60. extern void wg_fn1_const(uint8_t* buf, PSTR_TY, int32_t arg0);
  61. extern void wg_fn1_const_ret(uint8_t* buf, PSTR_TY, int32_t arg0);
  62. extern void wg_fn2_const(uint8_t* buf, PSTR_TY, int32_t arg0, int32_t arg1);
  63. extern void wg_fn3_const(uint8_t* buf, PSTR_TY, int32_t arg0, int32_t arg1, int32_t arg2);
  64. extern void wg_call_fn1_ret(uint8_t* buf, PSTR_TY);
  65. extern void wg_call_fn2(uint8_t* buf, PSTR_TY);
  66. #undef PSTR_TY