Int128 compiler-rt methods (Int128 literal support part 1)#11206
Int128 compiler-rt methods (Int128 literal support part 1)#11206straight-shoota merged 12 commits intocrystal-lang:masterfrom
Conversation
|
In rust's compiler-builtins, the method __muloti4 needed to be in AFAIK should be @[CallConvention("unadjusted")], but this is not a valid call convention in crystal. The __muloti4 specs fail on windows, but this shouldn't need SIMD. |
|
It seems that's a calling convention in Rust, but I don't see it listed in LLVM: https://llvm.org/docs/LangRef.html#calling-conventions I don't know what they call "unadjusted". You can put a CallConvetion annotation to functions and methods: The values there should be updated. Unfortunately I can't figure out what's this "unadjusted" in Rust... 🤔 |
|
I found something: rust-lang/rust#38482 (comment) Good luck! (I still think we should drop support for Int128 and UInt128) |
|
|
|
Specs fail on win32 with both LLVM 10.0 and 11.1 for me. So it appears to be something different. But don't worry about that. |
Just checked again, looks like I forgot to replace the win32_std_spec.cr 😄 |
|
I think this should be ready to review now |
I think this one should be reverted. We shouldn't use new compiler features in std specs. Otherwise you can't run std specs without compiling a new compiler. |
|
(though maybe that changed, no idea... if CI passes it's fine, maybe someone changed that rule...) |
Everything necessary to pass the specs is in the prelude, the compiler source hasn't changed. |
Co-authored-by: Johannes Müller <straightshoota@gmail.com>
Includes the compiler-rt methods from #11196.
The modulo and dision methods do not work on windows due to the lack of SIMD support in crystal.