aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-05-29 16:49:26 +0100
committergingerBill <bill@gingerbill.org>2019-05-29 16:49:26 +0100
commit654740d5b110328e2c6b86f8f0cbd7853e730cfa (patch)
tree81fa5d8efd7e59edb97ef52593d04c94448ec3d2 /src
parentb894e2b3788307546e330bd43304e5ff785dac51 (diff)
Fixes to ABI
Diffstat (limited to 'src')
-rw-r--r--src/check_decl.cpp2
-rw-r--r--src/check_type.cpp29
-rw-r--r--src/query_data.cpp2
3 files changed, 16 insertions, 17 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp
index 07c0d1828..da2214d89 100644
--- a/src/check_decl.cpp
+++ b/src/check_decl.cpp
@@ -440,7 +440,7 @@ bool sig_compare(TypeCheckSig *a, TypeCheckSig *b, Type *x, Type *y) {
if (a == b) {
return sig_compare(a, x, y);
}
- return (a(x) && b(y) || b(x) && a(y));
+ return ((a(x) && b(y)) || (b(x) && a(y)));
}
bool signature_parameter_similar_enough(Type *x, Type *y) {
diff --git a/src/check_type.cpp b/src/check_type.cpp
index ca0fab260..f7d577a54 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -1842,6 +1842,10 @@ Type *type_to_abi_compat_param_type(gbAllocator a, Type *original_type, ProcCall
return new_type;
}
+ if (cc == ProcCC_None) {
+ return new_type;
+ }
+
if (build_context.ODIN_ARCH == "386") {
return new_type;
}
@@ -1849,21 +1853,17 @@ Type *type_to_abi_compat_param_type(gbAllocator a, Type *original_type, ProcCall
if (is_type_simd_vector(original_type)) {
return new_type;
}
+ if (build_context.word_size == 8) {
+ if (is_type_integer_128bit(original_type)) {
+ return alloc_type_simd_vector(2, t_u64);
+ }
+ }
if (build_context.ODIN_OS == "windows") {
// NOTE(bill): Changing the passing parameter value type is to match C's ABI
// IMPORTANT TODO(bill): This only matches the ABI on MSVC at the moment
// SEE: https://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
- if (build_context.word_size == 8) {
- if (is_type_integer_128bit(original_type)) {
- if (cc == ProcCC_None) {
- return original_type;
- } else {
- return alloc_type_simd_vector(2, t_u64);
- }
- }
- }
Type *bt = core_type(original_type);
switch (bt->kind) {
@@ -2044,14 +2044,13 @@ bool abi_compat_return_by_pointer(gbAllocator a, ProcCallingConvention cc, Type
return false;
}
-
- if (build_context.ODIN_OS == "windows") {
- if (build_context.word_size == 8) {
- if (is_type_integer_128bit(single_type)) {
- return false;
- }
+ if (build_context.word_size == 8) {
+ if (is_type_integer_128bit(single_type)) {
+ return false;
}
+ }
+ if (build_context.ODIN_OS == "windows") {
i64 size = 8*type_size_of(abi_return_type);
switch (size) {
case 0:
diff --git a/src/query_data.cpp b/src/query_data.cpp
index 5a928cb31..8e9cf5f33 100644
--- a/src/query_data.cpp
+++ b/src/query_data.cpp
@@ -301,7 +301,7 @@ void print_query_data_as_json(QueryValue *value, bool format = true, isize inden
}
case Query_Integer: {
auto v = cast(QueryValueInteger *)value;
- gb_printf("%lld", v->value);
+ gb_printf("%lld", cast(long long)v->value);
return;
}
case Query_Float: {