| ... | ... | @@ -78,7 +78,7 @@ int main(int argc, char **argv) { |
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | const char *mod = "wasm"; |
| 81 | | bool isBigEndian = false; // TODO |
| 81 | bool is_big_endian = false; // TODO |
| 82 | 82 | |
| 83 | 83 | struct InputStream in; |
| 84 | 84 | InputStream_open(&in, argv[1]); |
| ... | ... | @@ -95,6 +95,112 @@ int main(int argc, char **argv) { |
| 95 | 95 | "#include <stdint.h>\n" |
| 96 | 96 | "#include <stdlib.h>\n" |
| 97 | 97 | "#include <string.h>\n" |
| 98 | "\n", out); |
| 99 | if (is_big_endian) |
| 100 | fputs("static uint16_t i16_byteswap(uint16_t src) {\n" |
| 101 | " return (uint16_t)(uint8_t)(src >> 0) << 8 |\n" |
| 102 | " (uint16_t)(uint8_t)(src >> 8) << 0;\n" |
| 103 | "}\n" |
| 104 | "static uint32_t i32_byteswap(uint32_t src) {\n" |
| 105 | " return (uint32_t)i16_byteswap(src >> 0) << 16 |\n" |
| 106 | " (uint32_t)i16_byteswap(src >> 16) << 0;\n" |
| 107 | "}\n" |
| 108 | "static uint64_t i64_byteswap(uint64_t src) {\n" |
| 109 | " return (uint64_t)i32_byteswap(src >> 0) << 32 |\n" |
| 110 | " (uint64_t)i32_byteswap(src >> 32) << 0;\n" |
| 111 | "}\n" |
| 112 | "\n", out); |
| 113 | fputs("static uint16_t load16_align0(const uint8_t *ptr) {\n" |
| 114 | " uint16_t val;\n" |
| 115 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 116 | if (is_big_endian) fputs(" val = i16_byteswap(val);", out); |
| 117 | fputs(" return val;\n" |
| 118 | "}\n" |
| 119 | "static uint16_t load16_align1(const uint16_t *ptr) {\n" |
| 120 | " uint16_t val;\n" |
| 121 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 122 | if (is_big_endian) fputs(" val = i16_byteswap(val);", out); |
| 123 | fputs(" return val;\n" |
| 124 | "}\n" |
| 125 | "static uint32_t load32_align0(const uint8_t *ptr) {\n" |
| 126 | " uint32_t val;\n" |
| 127 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 128 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 129 | fputs(" return val;\n" |
| 130 | "}\n" |
| 131 | "static uint32_t load32_align1(const uint16_t *ptr) {\n" |
| 132 | " uint32_t val;\n" |
| 133 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 134 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 135 | fputs(" return val;\n" |
| 136 | "}\n" |
| 137 | "static uint32_t load32_align2(const uint32_t *ptr) {\n" |
| 138 | " uint32_t val;\n" |
| 139 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 140 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 141 | fputs(" return val;\n" |
| 142 | "}\n" |
| 143 | "static uint64_t load64_align0(const uint8_t *ptr) {\n" |
| 144 | " uint64_t val;\n" |
| 145 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 146 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 147 | fputs(" return val;\n" |
| 148 | "}\n" |
| 149 | "static uint64_t load64_align1(const uint16_t *ptr) {\n" |
| 150 | " uint64_t val;\n" |
| 151 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 152 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 153 | fputs(" return val;\n" |
| 154 | "}\n" |
| 155 | "static uint64_t load64_align2(const uint32_t *ptr) {\n" |
| 156 | " uint64_t val;\n" |
| 157 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 158 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 159 | fputs(" return val;\n" |
| 160 | "}\n" |
| 161 | "static uint64_t load64_align3(const uint64_t *ptr) {\n" |
| 162 | " uint64_t val;\n" |
| 163 | " memcpy(&val, ptr, sizeof(val));\n", out); |
| 164 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 165 | fputs(" return val;\n" |
| 166 | "}\n" |
| 167 | "\n" |
| 168 | "static void store16_align0(uint8_t *ptr, uint16_t val) {\n", out); |
| 169 | if (is_big_endian) fputs(" val = i16_byteswap(val);", out); |
| 170 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 171 | "}\n" |
| 172 | "static void store16_align1(uint16_t *ptr, uint16_t val) {\n", out); |
| 173 | if (is_big_endian) fputs(" val = i16_byteswap(val);", out); |
| 174 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 175 | "}\n" |
| 176 | "static void store32_align0(uint8_t *ptr, uint32_t val) {\n", out); |
| 177 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 178 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 179 | "}\n" |
| 180 | "static void store32_align1(uint16_t *ptr, uint32_t val) {\n", out); |
| 181 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 182 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 183 | "}\n" |
| 184 | "static void store32_align2(uint32_t *ptr, uint32_t val) {\n", out); |
| 185 | if (is_big_endian) fputs(" val = i32_byteswap(val);", out); |
| 186 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 187 | "}\n" |
| 188 | "static void store64_align0(uint8_t *ptr, uint64_t val) {\n", out); |
| 189 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 190 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 191 | "}\n" |
| 192 | "static void store64_align1(uint16_t *ptr, uint64_t val) {\n", out); |
| 193 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 194 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 195 | "}\n" |
| 196 | "static void store64_align2(uint32_t *ptr, uint64_t val) {\n", out); |
| 197 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 198 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 199 | "}\n" |
| 200 | "static void store64_align3(uint64_t *ptr, uint64_t val) {\n", out); |
| 201 | if (is_big_endian) fputs(" val = i64_byteswap(val);", out); |
| 202 | fputs(" memcpy(ptr, &val, sizeof(val));\n" |
| 203 | "}\n" |
| 98 | 204 | "\n" |
| 99 | 205 | "static uint32_t i32_reinterpret_f32(const float src) {\n" |
| 100 | 206 | " uint32_t dst;\n" |
| ... | ... | @@ -912,18 +1018,9 @@ int main(int argc, char **argv) { |
| 912 | 1018 | if (unreachable_depth == 0) { |
| 913 | 1019 | uint32_t base = FuncGen_stackPop(&fg); |
| 914 | 1020 | FuncGen_stackPush(&fg, out, WasmValType_i32); |
| 915 | | if (align < 2 || isBigEndian) { |
| 916 | | fseek(out, -1, SEEK_CUR); |
| 917 | | fputc('\n', out); |
| 918 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 919 | | if (byte_i > 0) fputs(" |\n", out); |
| 920 | | FuncGen_cont(&fg, out); |
| 921 | | fprintf(out, "(uint32_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 922 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 923 | | } |
| 924 | | } else fprintf(out, "*(const uint32_t *)&m%" PRIu32 "[l%" PRIu32 |
| 925 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 926 | | fputs(";\n", out); |
| 1021 | fprintf(out, "load32_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" PRIu32 |
| 1022 | "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1023 | align, 8 << align, 0, base, offset); |
| 927 | 1024 | } |
| 928 | 1025 | break; |
| 929 | 1026 | } |
| ... | ... | @@ -933,18 +1030,9 @@ int main(int argc, char **argv) { |
| 933 | 1030 | if (unreachable_depth == 0) { |
| 934 | 1031 | uint32_t base = FuncGen_stackPop(&fg); |
| 935 | 1032 | FuncGen_stackPush(&fg, out, WasmValType_i64); |
| 936 | | if (align < 3 || isBigEndian) { |
| 937 | | fseek(out, -1, SEEK_CUR); |
| 938 | | fputc('\n', out); |
| 939 | | for (uint8_t byte_i = 0; byte_i < 8; byte_i += 1) { |
| 940 | | if (byte_i > 0) fputs(" |\n", out); |
| 941 | | FuncGen_cont(&fg, out); |
| 942 | | fprintf(out, "(uint64_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 943 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 944 | | } |
| 945 | | } else fprintf(out, "*(const uint64_t *)&m%" PRIu32 "[l%" PRIu32 |
| 946 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 947 | | fputs(";\n", out); |
| 1033 | fprintf(out, "load64_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" PRIu32 |
| 1034 | "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1035 | align, 8 << align, 0, base, offset); |
| 948 | 1036 | } |
| 949 | 1037 | break; |
| 950 | 1038 | } |
| ... | ... | @@ -954,18 +1042,9 @@ int main(int argc, char **argv) { |
| 954 | 1042 | if (unreachable_depth == 0) { |
| 955 | 1043 | uint32_t base = FuncGen_stackPop(&fg); |
| 956 | 1044 | FuncGen_stackPush(&fg, out, WasmValType_f32); |
| 957 | | if (align < 2 || isBigEndian) { |
| 958 | | fputs("f32_reinterpret_i32(\n", out); |
| 959 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 960 | | if (byte_i > 0) fputs(" |\n", out); |
| 961 | | FuncGen_cont(&fg, out); |
| 962 | | fprintf(out, "(uint32_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 963 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 964 | | } |
| 965 | | fputc(')', out); |
| 966 | | } else fprintf(out, "*(const float *)&m%" PRIu32 "[l%" PRIu32 |
| 967 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 968 | | fputs(";\n", out); |
| 1045 | fprintf(out, "f32_reinterpret_i32(load32_align%" PRIu32 "((const uint%" PRIu32 |
| 1046 | "_t *)&m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]));\n", |
| 1047 | align, 8 << align, 0, base, offset); |
| 969 | 1048 | } |
| 970 | 1049 | break; |
| 971 | 1050 | } |
| ... | ... | @@ -975,18 +1054,9 @@ int main(int argc, char **argv) { |
| 975 | 1054 | if (unreachable_depth == 0) { |
| 976 | 1055 | uint32_t base = FuncGen_stackPop(&fg); |
| 977 | 1056 | FuncGen_stackPush(&fg, out, WasmValType_f64); |
| 978 | | if (align < 3 || isBigEndian) { |
| 979 | | fputs("f64_reinterpret_i64(\n", out); |
| 980 | | for (uint8_t byte_i = 0; byte_i < 8; byte_i += 1) { |
| 981 | | if (byte_i > 0) fputs(" |\n", out); |
| 982 | | FuncGen_cont(&fg, out); |
| 983 | | fprintf(out, "(uint64_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 984 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 985 | | } |
| 986 | | fputc(')', out); |
| 987 | | } else fprintf(out, "*(const double *)&m%" PRIu32 "[l%" PRIu32 |
| 988 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 989 | | fputs(";\n", out); |
| 1057 | fprintf(out, "f64_reinterpret_i64(load64_align%" PRIu32 "((const uint%" PRIu32 |
| 1058 | "_t *)&m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]));\n", |
| 1059 | align, 8 << align, 0, base, offset); |
| 990 | 1060 | } |
| 991 | 1061 | break; |
| 992 | 1062 | } |
| ... | ... | @@ -1018,18 +1088,9 @@ int main(int argc, char **argv) { |
| 1018 | 1088 | if (unreachable_depth == 0) { |
| 1019 | 1089 | uint32_t base = FuncGen_stackPop(&fg); |
| 1020 | 1090 | FuncGen_stackPush(&fg, out, WasmValType_i32); |
| 1021 | | if (align < 1 || isBigEndian) { |
| 1022 | | fputs("(int16_t)(\n", out); |
| 1023 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1024 | | if (byte_i > 0) fputs(" |\n", out); |
| 1025 | | FuncGen_cont(&fg, out); |
| 1026 | | fprintf(out, "(uint16_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1027 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1028 | | } |
| 1029 | | fputc(')', out); |
| 1030 | | } else fprintf(out, "*(const int16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1031 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1032 | | fputs(";\n", out); |
| 1091 | fprintf(out, "(int16_t)load16_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1092 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1093 | align, 8 << align, 0, base, offset); |
| 1033 | 1094 | } |
| 1034 | 1095 | break; |
| 1035 | 1096 | } |
| ... | ... | @@ -1039,18 +1100,9 @@ int main(int argc, char **argv) { |
| 1039 | 1100 | if (unreachable_depth == 0) { |
| 1040 | 1101 | uint32_t base = FuncGen_stackPop(&fg); |
| 1041 | 1102 | FuncGen_stackPush(&fg, out, WasmValType_i32); |
| 1042 | | if (align < 1 || isBigEndian) { |
| 1043 | | fseek(out, -1, SEEK_CUR); |
| 1044 | | fputc('\n', out); |
| 1045 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1046 | | if (byte_i > 0) fputs(" |\n", out); |
| 1047 | | FuncGen_cont(&fg, out); |
| 1048 | | fprintf(out, "(uint16_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1049 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1050 | | } |
| 1051 | | } else fprintf(out, "*(const uint16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1052 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1053 | | fputs(";\n", out); |
| 1103 | fprintf(out, "load16_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1104 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1105 | align, 8 << align, 0, base, offset); |
| 1054 | 1106 | } |
| 1055 | 1107 | break; |
| 1056 | 1108 | } |
| ... | ... | @@ -1082,18 +1134,9 @@ int main(int argc, char **argv) { |
| 1082 | 1134 | if (unreachable_depth == 0) { |
| 1083 | 1135 | uint32_t base = FuncGen_stackPop(&fg); |
| 1084 | 1136 | FuncGen_stackPush(&fg, out, WasmValType_i64); |
| 1085 | | if (align < 1 || isBigEndian) { |
| 1086 | | fputs("(int16_t)(\n", out); |
| 1087 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1088 | | if (byte_i > 0) fputs(" |\n", out); |
| 1089 | | FuncGen_cont(&fg, out); |
| 1090 | | fprintf(out, "(uint16_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1091 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1092 | | } |
| 1093 | | fputc(')', out); |
| 1094 | | } else fprintf(out, "*(const int16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1095 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1096 | | fputs(";\n", out); |
| 1137 | fprintf(out, "(int16_t)load16_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1138 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1139 | align, 8 << align, 0, base, offset); |
| 1097 | 1140 | } |
| 1098 | 1141 | break; |
| 1099 | 1142 | } |
| ... | ... | @@ -1103,18 +1146,9 @@ int main(int argc, char **argv) { |
| 1103 | 1146 | if (unreachable_depth == 0) { |
| 1104 | 1147 | uint32_t base = FuncGen_stackPop(&fg); |
| 1105 | 1148 | FuncGen_stackPush(&fg, out, WasmValType_i64); |
| 1106 | | if (align < 1 || isBigEndian) { |
| 1107 | | fseek(out, -1, SEEK_CUR); |
| 1108 | | fputc('\n', out); |
| 1109 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1110 | | if (byte_i > 0) fputs(" |\n", out); |
| 1111 | | FuncGen_cont(&fg, out); |
| 1112 | | fprintf(out, "(uint16_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1113 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1114 | | } |
| 1115 | | } else fprintf(out, "*(const uint16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1116 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1117 | | fputs(";\n", out); |
| 1149 | fprintf(out, "load16_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1150 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1151 | align, 8 << align, 0, base, offset); |
| 1118 | 1152 | } |
| 1119 | 1153 | break; |
| 1120 | 1154 | } |
| ... | ... | @@ -1124,18 +1158,9 @@ int main(int argc, char **argv) { |
| 1124 | 1158 | if (unreachable_depth == 0) { |
| 1125 | 1159 | uint32_t base = FuncGen_stackPop(&fg); |
| 1126 | 1160 | FuncGen_stackPush(&fg, out, WasmValType_i64); |
| 1127 | | if (align < 2 || isBigEndian) { |
| 1128 | | fputs("(int32_t)(\n", out); |
| 1129 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 1130 | | if (byte_i > 0) fputs(" |\n", out); |
| 1131 | | FuncGen_cont(&fg, out); |
| 1132 | | fprintf(out, "(uint32_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1133 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1134 | | } |
| 1135 | | fputc(')', out); |
| 1136 | | } else fprintf(out, "*(const int32_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1137 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1138 | | fputs(";\n", out); |
| 1161 | fprintf(out, "(int32_t)load32_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1162 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1163 | align, 8 << align, 0, base, offset); |
| 1139 | 1164 | } |
| 1140 | 1165 | break; |
| 1141 | 1166 | } |
| ... | ... | @@ -1145,18 +1170,9 @@ int main(int argc, char **argv) { |
| 1145 | 1170 | if (unreachable_depth == 0) { |
| 1146 | 1171 | uint32_t base = FuncGen_stackPop(&fg); |
| 1147 | 1172 | FuncGen_stackPush(&fg, out, WasmValType_i64); |
| 1148 | | if (align < 2 || isBigEndian) { |
| 1149 | | fseek(out, -1, SEEK_CUR); |
| 1150 | | fputc('\n', out); |
| 1151 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 1152 | | if (byte_i > 0) fputs(" |\n", out); |
| 1153 | | FuncGen_cont(&fg, out); |
| 1154 | | fprintf(out, "(uint32_t)m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" |
| 1155 | | PRIu32 ")] << %2u", 0, base, offset + byte_i, byte_i << 3); |
| 1156 | | } |
| 1157 | | } else fprintf(out, "*(const uint32_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1158 | | " + UINT32_C(%" PRIu32 ")]", 0, base, offset); |
| 1159 | | fputs(";\n", out); |
| 1173 | fprintf(out, "load32_align%" PRIu32 "((const uint%" PRIu32 "_t *)&m%" |
| 1174 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")]);\n", |
| 1175 | align, 8 << align, 0, base, offset); |
| 1160 | 1176 | } |
| 1161 | 1177 | break; |
| 1162 | 1178 | } |
| ... | ... | @@ -1167,19 +1183,10 @@ int main(int argc, char **argv) { |
| 1167 | 1183 | if (unreachable_depth == 0) { |
| 1168 | 1184 | uint32_t value = FuncGen_stackPop(&fg); |
| 1169 | 1185 | uint32_t base = FuncGen_stackPop(&fg); |
| 1170 | | if (align < 2 || isBigEndian) { |
| 1171 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 1172 | | FuncGen_indent(&fg, out); |
| 1173 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1174 | | "(uint8_t)(l%" PRIu32 " >> %2u);\n", |
| 1175 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1176 | | } |
| 1177 | | } else { |
| 1178 | | FuncGen_indent(&fg, out); |
| 1179 | | fprintf(out, "*(uint32_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1180 | | " + UINT32_C(%" PRIu32 ")] = l%" PRIu32 ";\n", |
| 1181 | | 0, base, offset, value); |
| 1182 | | } |
| 1186 | FuncGen_indent(&fg, out); |
| 1187 | fprintf(out, "store32_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1188 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], l%" PRIu32 ");\n", |
| 1189 | align, 8 << align, 0, base, offset, value); |
| 1183 | 1190 | } |
| 1184 | 1191 | break; |
| 1185 | 1192 | } |
| ... | ... | @@ -1189,19 +1196,10 @@ int main(int argc, char **argv) { |
| 1189 | 1196 | if (unreachable_depth == 0) { |
| 1190 | 1197 | uint32_t value = FuncGen_stackPop(&fg); |
| 1191 | 1198 | uint32_t base = FuncGen_stackPop(&fg); |
| 1192 | | if (align < 3 || isBigEndian) { |
| 1193 | | for (uint8_t byte_i = 0; byte_i < 8; byte_i += 1) { |
| 1194 | | FuncGen_indent(&fg, out); |
| 1195 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1196 | | "(uint8_t)(l%" PRIu32 " >> %2u);\n", |
| 1197 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1198 | | } |
| 1199 | | } else { |
| 1200 | | FuncGen_indent(&fg, out); |
| 1201 | | fprintf(out, "*(uint64_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1202 | | " + UINT32_C(%" PRIu32 ")] = l%" PRIu32 ";\n", |
| 1203 | | 0, base, offset, value); |
| 1204 | | } |
| 1199 | FuncGen_indent(&fg, out); |
| 1200 | fprintf(out, "store64_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1201 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], l%" PRIu32 ");\n", |
| 1202 | align, 8 << align, 0, base, offset, value); |
| 1205 | 1203 | } |
| 1206 | 1204 | break; |
| 1207 | 1205 | } |
| ... | ... | @@ -1211,19 +1209,11 @@ int main(int argc, char **argv) { |
| 1211 | 1209 | if (unreachable_depth == 0) { |
| 1212 | 1210 | uint32_t value = FuncGen_stackPop(&fg); |
| 1213 | 1211 | uint32_t base = FuncGen_stackPop(&fg); |
| 1214 | | if (align < 2 || isBigEndian) { |
| 1215 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 1216 | | FuncGen_indent(&fg, out); |
| 1217 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1218 | | "(uint8_t)(i32_reinterpret_f32(l%" PRIu32 ") >> %2u);\n", |
| 1219 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1220 | | } |
| 1221 | | } else { |
| 1222 | | FuncGen_indent(&fg, out); |
| 1223 | | fprintf(out, "*(float *)&m%" PRIu32 "[l%" PRIu32 |
| 1224 | | " + UINT32_C(%" PRIu32 ")] = l%" PRIu32 ";\n", |
| 1225 | | 0, base, offset, value); |
| 1226 | | } |
| 1212 | FuncGen_indent(&fg, out); |
| 1213 | fprintf(out, "store32_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1214 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], " |
| 1215 | "i32_reinterpret_f32(l%" PRIu32 "));\n", |
| 1216 | align, 8 << align, 0, base, offset, value); |
| 1227 | 1217 | } |
| 1228 | 1218 | break; |
| 1229 | 1219 | } |
| ... | ... | @@ -1233,19 +1223,11 @@ int main(int argc, char **argv) { |
| 1233 | 1223 | if (unreachable_depth == 0) { |
| 1234 | 1224 | uint32_t value = FuncGen_stackPop(&fg); |
| 1235 | 1225 | uint32_t base = FuncGen_stackPop(&fg); |
| 1236 | | if (align < 3 || isBigEndian) { |
| 1237 | | for (uint8_t byte_i = 0; byte_i < 8; byte_i += 1) { |
| 1238 | | FuncGen_indent(&fg, out); |
| 1239 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1240 | | "(uint8_t)(i64_reinterpret_f64(l%" PRIu32 ") >> %2u);\n", |
| 1241 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1242 | | } |
| 1243 | | } else { |
| 1244 | | FuncGen_indent(&fg, out); |
| 1245 | | fprintf(out, "*(double *)&m%" PRIu32 "[l%" PRIu32 |
| 1246 | | " + UINT32_C(%" PRIu32 ")] = l%" PRIu32 ";\n", |
| 1247 | | 0, base, offset, value); |
| 1248 | | } |
| 1226 | FuncGen_indent(&fg, out); |
| 1227 | fprintf(out, "store64_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1228 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], " |
| 1229 | "i64_reinterpret_f64(l%" PRIu32 "));\n", |
| 1230 | align, 8 << align, 0, base, offset, value); |
| 1249 | 1231 | } |
| 1250 | 1232 | break; |
| 1251 | 1233 | } |
| ... | ... | @@ -1267,19 +1249,11 @@ int main(int argc, char **argv) { |
| 1267 | 1249 | if (unreachable_depth == 0) { |
| 1268 | 1250 | uint32_t value = FuncGen_stackPop(&fg); |
| 1269 | 1251 | uint32_t base = FuncGen_stackPop(&fg); |
| 1270 | | if (align < 1 || isBigEndian) { |
| 1271 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1272 | | FuncGen_indent(&fg, out); |
| 1273 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1274 | | "(uint8_t)(l%" PRIu32 " >> %2u);\n", |
| 1275 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1276 | | } |
| 1277 | | } else { |
| 1278 | | FuncGen_indent(&fg, out); |
| 1279 | | fprintf(out, "*(uint16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1280 | | " + UINT32_C(%" PRIu32 ")] = (uint16_t)l%" PRIu32 ";\n", |
| 1281 | | 0, base, offset, value); |
| 1282 | | } |
| 1252 | FuncGen_indent(&fg, out); |
| 1253 | fprintf(out, "store16_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1254 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], " |
| 1255 | "(uint16_t)l%" PRIu32 ");\n", |
| 1256 | align, 8 << align, 0, base, offset, value); |
| 1283 | 1257 | } |
| 1284 | 1258 | break; |
| 1285 | 1259 | } |
| ... | ... | @@ -1301,19 +1275,11 @@ int main(int argc, char **argv) { |
| 1301 | 1275 | if (unreachable_depth == 0) { |
| 1302 | 1276 | uint32_t value = FuncGen_stackPop(&fg); |
| 1303 | 1277 | uint32_t base = FuncGen_stackPop(&fg); |
| 1304 | | if (align < 1 || isBigEndian) { |
| 1305 | | for (uint8_t byte_i = 0; byte_i < 2; byte_i += 1) { |
| 1306 | | FuncGen_indent(&fg, out); |
| 1307 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1308 | | "(uint8_t)(l%" PRIu32 " >> %2u);\n", |
| 1309 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1310 | | } |
| 1311 | | } else { |
| 1312 | | FuncGen_indent(&fg, out); |
| 1313 | | fprintf(out, "*(uint16_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1314 | | " + UINT32_C(%" PRIu32 ")] = (uint16_t)l%" PRIu32 ";\n", |
| 1315 | | 0, base, offset, value); |
| 1316 | | } |
| 1278 | FuncGen_indent(&fg, out); |
| 1279 | fprintf(out, "store16_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1280 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], " |
| 1281 | "(uint16_t)l%" PRIu32 ");\n", |
| 1282 | align, 8 << align, 0, base, offset, value); |
| 1317 | 1283 | } |
| 1318 | 1284 | break; |
| 1319 | 1285 | } |
| ... | ... | @@ -1323,19 +1289,11 @@ int main(int argc, char **argv) { |
| 1323 | 1289 | if (unreachable_depth == 0) { |
| 1324 | 1290 | uint32_t value = FuncGen_stackPop(&fg); |
| 1325 | 1291 | uint32_t base = FuncGen_stackPop(&fg); |
| 1326 | | if (align < 2 || isBigEndian) { |
| 1327 | | for (uint8_t byte_i = 0; byte_i < 4; byte_i += 1) { |
| 1328 | | FuncGen_indent(&fg, out); |
| 1329 | | fprintf(out, "m%" PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")] = " |
| 1330 | | "(uint8_t)(l%" PRIu32 " >> %2u);\n", |
| 1331 | | 0, base, offset + byte_i, value, byte_i << 3); |
| 1332 | | } |
| 1333 | | } else { |
| 1334 | | FuncGen_indent(&fg, out); |
| 1335 | | fprintf(out, "*(uint32_t *)&m%" PRIu32 "[l%" PRIu32 |
| 1336 | | " + UINT32_C(%" PRIu32 ")] = (uint32_t)l%" PRIu32 ";\n", |
| 1337 | | 0, base, offset, value); |
| 1338 | | } |
| 1292 | FuncGen_indent(&fg, out); |
| 1293 | fprintf(out, "store32_align%" PRIu32 "((uint%" PRIu32 "_t *)&m%" |
| 1294 | PRIu32 "[l%" PRIu32 " + UINT32_C(%" PRIu32 ")], " |
| 1295 | "(uint32_t)l%" PRIu32 ");\n", |
| 1296 | align, 8 << align, 0, base, offset, value); |
| 1339 | 1297 | } |
| 1340 | 1298 | break; |
| 1341 | 1299 | } |