codecbench.patch 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2. index 612cf3b..22a365a 100644
  3. --- a/CMakeLists.txt
  4. +++ b/CMakeLists.txt
  5. @@ -158,3 +158,43 @@ install(FILES
  6. ${CMAKE_CURRENT_BINARY_DIR}/meshoptimizerConfigVersion.cmake
  7. COMPONENT meshoptimizer
  8. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/meshoptimizer)
  9. +
  10. +##################################################
  11. +# codecbench
  12. +##################################################
  13. +add_executable(codecbench tools/codecbench.cpp ${SOURCES})
  14. +
  15. +set_target_properties(codecbench PROPERTIES OUTPUT_NAME codecbench.wasm)
  16. +
  17. +target_compile_options(codecbench
  18. + PUBLIC
  19. + -O3 -msimd128
  20. + -std=c++11
  21. + -Wno-unused-function
  22. + -Wno-unused-variable
  23. +)
  24. +
  25. +target_link_options(codecbench
  26. + PUBLIC
  27. + LINKER:-allow-undefined,--demangle,--export=malloc,--export=free
  28. +)
  29. +
  30. +find_program(WASM_OPT
  31. + NAMES wasm-opt
  32. + PATHS /opt/binaryen-version_97/bin /opt/binaryen/bin
  33. +)
  34. +
  35. +if (NOT WASM_OPT)
  36. + message(WARNING "can not find wasm-opt and will not optimize any wasm module")
  37. +endif()
  38. +
  39. +add_custom_target(codecbench.opt ALL
  40. + COMMAND
  41. + ${WASM_OPT} -Oz --enable-simd -o codecbench.opt.wasm codecbench.wasm
  42. + BYPRODUCTS
  43. + ${CMAKE_CURRENT_BINARY_DIR}/codecbench.opt.wasm
  44. + WORKING_DIRECTORY
  45. + ${CMAKE_CURRENT_BINARY_DIR}
  46. +)
  47. +
  48. +add_dependencies(codecbench.opt codecbench)
  49. diff --git a/src/vertexcodec.cpp b/src/vertexcodec.cpp
  50. index 4bd1112..257c258 100644
  51. --- a/src/vertexcodec.cpp
  52. +++ b/src/vertexcodec.cpp
  53. @@ -89,13 +89,13 @@
  54. #endif
  55. #ifdef SIMD_WASM
  56. -#define wasmx_splat_v32x4(v, i) wasm_v32x4_shuffle(v, v, i, i, i, i)
  57. -#define wasmx_unpacklo_v8x16(a, b) wasm_v8x16_shuffle(a, b, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23)
  58. -#define wasmx_unpackhi_v8x16(a, b) wasm_v8x16_shuffle(a, b, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31)
  59. -#define wasmx_unpacklo_v16x8(a, b) wasm_v16x8_shuffle(a, b, 0, 8, 1, 9, 2, 10, 3, 11)
  60. -#define wasmx_unpackhi_v16x8(a, b) wasm_v16x8_shuffle(a, b, 4, 12, 5, 13, 6, 14, 7, 15)
  61. -#define wasmx_unpacklo_v64x2(a, b) wasm_v64x2_shuffle(a, b, 0, 2)
  62. -#define wasmx_unpackhi_v64x2(a, b) wasm_v64x2_shuffle(a, b, 1, 3)
  63. +#define wasmx_splat_v32x4(v, i) wasm_i32x4_shuffle(v, v, i, i, i, i)
  64. +#define wasmx_unpacklo_v8x16(a, b) wasm_i8x16_shuffle(a, b, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23)
  65. +#define wasmx_unpackhi_v8x16(a, b) wasm_i8x16_shuffle(a, b, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31)
  66. +#define wasmx_unpacklo_v16x8(a, b) wasm_i16x8_shuffle(a, b, 0, 8, 1, 9, 2, 10, 3, 11)
  67. +#define wasmx_unpackhi_v16x8(a, b) wasm_i16x8_shuffle(a, b, 4, 12, 5, 13, 6, 14, 7, 15)
  68. +#define wasmx_unpacklo_v64x2(a, b) wasm_i64x2_shuffle(a, b, 0, 2)
  69. +#define wasmx_unpackhi_v64x2(a, b) wasm_i64x2_shuffle(a, b, 1, 3)
  70. #endif
  71. namespace meshopt
  72. @@ -757,7 +757,7 @@ static v128_t decodeShuffleMask(unsigned char mask0, unsigned char mask1)
  73. v128_t sm1 = wasm_v128_load(&kDecodeBytesGroupShuffle[mask1]);
  74. v128_t sm1off = wasm_v128_load(&kDecodeBytesGroupCount[mask0]);
  75. - sm1off = wasm_v8x16_shuffle(sm1off, sm1off, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  76. + sm1off = wasm_i8x16_shuffle(sm1off, sm1off, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  77. v128_t sm1r = wasm_i8x16_add(sm1, sm1off);
  78. @@ -807,7 +807,7 @@ static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsi
  79. v128_t shuf = decodeShuffleMask(mask0, mask1);
  80. - v128_t result = wasm_v128_bitselect(wasm_v8x16_swizzle(rest, shuf), sel, mask);
  81. + v128_t result = wasm_v128_bitselect(wasm_i8x16_swizzle(rest, shuf), sel, mask);
  82. wasm_v128_store(buffer, result);
  83. @@ -829,7 +829,7 @@ static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsi
  84. v128_t shuf = decodeShuffleMask(mask0, mask1);
  85. - v128_t result = wasm_v128_bitselect(wasm_v8x16_swizzle(rest, shuf), sel, mask);
  86. + v128_t result = wasm_v128_bitselect(wasm_i8x16_swizzle(rest, shuf), sel, mask);
  87. wasm_v128_store(buffer, result);
  88. diff --git a/src/vertexfilter.cpp b/src/vertexfilter.cpp
  89. index 5c7589c..c79cad4 100644
  90. --- a/src/vertexfilter.cpp
  91. +++ b/src/vertexfilter.cpp
  92. @@ -57,10 +57,10 @@
  93. #endif
  94. #ifdef SIMD_WASM
  95. -#define wasmx_unpacklo_v16x8(a, b) wasm_v16x8_shuffle(a, b, 0, 8, 1, 9, 2, 10, 3, 11)
  96. -#define wasmx_unpackhi_v16x8(a, b) wasm_v16x8_shuffle(a, b, 4, 12, 5, 13, 6, 14, 7, 15)
  97. -#define wasmx_unziplo_v32x4(a, b) wasm_v32x4_shuffle(a, b, 0, 2, 4, 6)
  98. -#define wasmx_unziphi_v32x4(a, b) wasm_v32x4_shuffle(a, b, 1, 3, 5, 7)
  99. +#define wasmx_unpacklo_v16x8(a, b) wasm_i16x8_shuffle(a, b, 0, 8, 1, 9, 2, 10, 3, 11)
  100. +#define wasmx_unpackhi_v16x8(a, b) wasm_i16x8_shuffle(a, b, 4, 12, 5, 13, 6, 14, 7, 15)
  101. +#define wasmx_unziplo_v32x4(a, b) wasm_i32x4_shuffle(a, b, 0, 2, 4, 6)
  102. +#define wasmx_unziphi_v32x4(a, b) wasm_i32x4_shuffle(a, b, 1, 3, 5, 7)
  103. #endif
  104. #ifndef __has_builtin