| ... | ... | @@ -253,14 +253,75 @@ const is_arm_arch = switch (builtin.arch) { |
| 253 | 253 | |
| 254 | 254 | const is_arm_32 = is_arm_arch and !is_arm_64; |
| 255 | 255 | |
| 256 | | const use_thumb_1 = is_arm_32 and switch (builtin.arch.arm) { |
| 257 | | builtin.Arch.Arm32.v6, |
| 258 | | builtin.Arch.Arm32.v6m, |
| 259 | | builtin.Arch.Arm32.v6k, |
| 260 | | builtin.Arch.Arm32.v6t2, |
| 261 | | => true, |
| 262 | | else => false, |
| 263 | | }; |
| 256 | const use_thumb_1 = usesThumb1(builtin.arch); |
| 257 | |
| 258 | fn usesThumb1(arch: builtin.Arch) bool { |
| 259 | return switch (arch) { |
| 260 | .arm => switch (arch.arm) { |
| 261 | .v6m => true, |
| 262 | else => false, |
| 263 | }, |
| 264 | .armeb => switch (arch.armeb) { |
| 265 | .v6m => true, |
| 266 | else => false, |
| 267 | }, |
| 268 | .thumb => switch (arch.thumb) { |
| 269 | .v5, |
| 270 | .v5te, |
| 271 | .v4t, |
| 272 | .v6, |
| 273 | .v6m, |
| 274 | .v6k, |
| 275 | => true, |
| 276 | else => false, |
| 277 | }, |
| 278 | .thumbeb => switch (arch.thumbeb) { |
| 279 | .v5, |
| 280 | .v5te, |
| 281 | .v4t, |
| 282 | .v6, |
| 283 | .v6m, |
| 284 | .v6k, |
| 285 | => true, |
| 286 | else => false, |
| 287 | }, |
| 288 | else => false, |
| 289 | }; |
| 290 | } |
| 291 | |
| 292 | test "usesThumb1" { |
| 293 | testing.expect(usesThumb1(builtin.Arch{ .arm = .v6m })); |
| 294 | testing.expect(!usesThumb1(builtin.Arch{ .arm = .v5 })); |
| 295 | //etc. |
| 296 | |
| 297 | testing.expect(usesThumb1(builtin.Arch{ .armeb = .v6m })); |
| 298 | testing.expect(!usesThumb1(builtin.Arch{ .armeb = .v5 })); |
| 299 | //etc. |
| 300 | |
| 301 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v5 })); |
| 302 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v5te })); |
| 303 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v4t })); |
| 304 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v6 })); |
| 305 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v6k })); |
| 306 | testing.expect(usesThumb1(builtin.Arch{ .thumb = .v6m })); |
| 307 | testing.expect(!usesThumb1(builtin.Arch{ .thumb = .v6t2 })); |
| 308 | //etc. |
| 309 | |
| 310 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v5 })); |
| 311 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v5te })); |
| 312 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v4t })); |
| 313 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v6 })); |
| 314 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v6k })); |
| 315 | testing.expect(usesThumb1(builtin.Arch{ .thumbeb = .v6m })); |
| 316 | testing.expect(!usesThumb1(builtin.Arch{ .thumbeb = .v6t2 })); |
| 317 | //etc. |
| 318 | |
| 319 | testing.expect(!usesThumb1(builtin.Arch{ .aarch64 = .v8 })); |
| 320 | testing.expect(!usesThumb1(builtin.Arch{ .aarch64_be = .v8 })); |
| 321 | testing.expect(!usesThumb1(builtin.Arch.x86_64)); |
| 322 | testing.expect(!usesThumb1(builtin.Arch.riscv32)); |
| 323 | //etc. |
| 324 | } |
| 264 | 325 | |
| 265 | 326 | nakedcc fn __aeabi_uidivmod() void { |
| 266 | 327 | @setRuntimeSafety(false); |