From efc95784c83cc054ed5a0f2d71ff0c66e3dfb2cf Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 22 Dec 2018 18:40:23 +0800 Subject: Codegen MMIR - Remove places where assert body needs to be evaluated (ref #97) --- src/trans/codegen_mmir.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/trans/codegen_mmir.cpp b/src/trans/codegen_mmir.cpp index b2c5282a..a7d47c0e 100644 --- a/src/trans/codegen_mmir.cpp +++ b/src/trans/codegen_mmir.cpp @@ -18,6 +18,14 @@ namespace { + size_t Target_GetSizeOf_Required(const Span& sp, const StaticTraitResolve& resolve, const ::HIR::TypeRef& ty) + { + size_t size; + bool type_has_size = Target_GetSizeOf(sp, resolve, ty, size); + ASSERT_BUG(sp, type_has_size, "Attempting to get the size of a unsized type"); + return size; + } + template struct Fmt { @@ -779,8 +787,7 @@ namespace cur_ofs ++; } emit_literal_as_bytes(le[i], repr->fields[i].ty, out_relocations, base_ofs + cur_ofs); - size_t size; - assert(Target_GetSizeOf(sp, m_resolve, repr->fields[i].ty, size)); + size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[i].ty); cur_ofs += size; } while(cur_ofs < repr->size) @@ -803,8 +810,7 @@ namespace emit_literal_as_bytes(*le.val, repr->fields[le.idx].ty, out_relocations, base_ofs + cur_ofs); - size_t size; - assert(Target_GetSizeOf(sp, m_resolve, repr->fields[le.idx].ty, size)); + size_t size = Target_GetSizeOf(sp, m_resolve, repr->fields[le.idx].ty); cur_ofs += size; } @@ -819,8 +825,7 @@ namespace auto v = ::HIR::Literal::make_Integer(le.idx); emit_literal_as_bytes(v, repr->fields[ve->field.index].ty, out_relocations, base_ofs + cur_ofs); - size_t size; - assert(Target_GetSizeOf(sp, m_resolve, repr->fields[ve->field.index].ty, size)); + size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[ve->field.index].ty) cur_ofs += size; } // TODO: Nonzero? @@ -888,8 +893,7 @@ namespace for(const auto& v : lit.as_List()) { emit_literal_as_bytes(v, *te.inner, out_relocations, base_ofs); - size_t size; - assert(Target_GetSizeOf(sp, m_resolve, *te.inner, size)); + size_t size = Target_GetSizeOf(sp, m_resolve, *te.inner, size); base_ofs += size; } } break; -- cgit v1.2.3 From ad5d36e85a25d1addb4c854114102bef696d4472 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 22 Dec 2018 18:41:23 +0800 Subject: (minor) Whitespace cleaup --- src/trans/codegen_mmir.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trans/codegen_mmir.cpp b/src/trans/codegen_mmir.cpp index a7d47c0e..4c17fe47 100644 --- a/src/trans/codegen_mmir.cpp +++ b/src/trans/codegen_mmir.cpp @@ -332,7 +332,7 @@ namespace else if( t.m_data.is_Slice() ) { return ::HIR::CoreType::Usize; } - else if( t.m_data.is_TraitObject() ) { + else if( t.m_data.is_TraitObject() ) { const auto& te = t.m_data.as_TraitObject(); //auto vtp = t.m_data.as_TraitObject().m_trait.m_path; @@ -389,7 +389,7 @@ namespace { m_of << "fn " << drop_glue_path << "(&move " << ty << ") {\n"; m_of << "\tlet unit: ();\n"; - + if( const auto* ity = m_resolve.is_type_owned_box(ty) ) { m_of << "\t0: {\n"; -- cgit v1.2.3 From 8e8e51ac1b04c7cc85a4a81d9c1906fb9f5a4d58 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 22 Dec 2018 18:42:50 +0800 Subject: Codegen MMIR - Forgot to compile before commit, fix syntax errors. --- src/trans/codegen_mmir.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trans/codegen_mmir.cpp b/src/trans/codegen_mmir.cpp index 4c17fe47..73de19d3 100644 --- a/src/trans/codegen_mmir.cpp +++ b/src/trans/codegen_mmir.cpp @@ -810,7 +810,7 @@ namespace emit_literal_as_bytes(*le.val, repr->fields[le.idx].ty, out_relocations, base_ofs + cur_ofs); - size_t size = Target_GetSizeOf(sp, m_resolve, repr->fields[le.idx].ty); + size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[le.idx].ty); cur_ofs += size; } @@ -825,7 +825,7 @@ namespace auto v = ::HIR::Literal::make_Integer(le.idx); emit_literal_as_bytes(v, repr->fields[ve->field.index].ty, out_relocations, base_ofs + cur_ofs); - size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[ve->field.index].ty) + size_t size = Target_GetSizeOf_Required(sp, m_resolve, repr->fields[ve->field.index].ty); cur_ofs += size; } // TODO: Nonzero? -- cgit v1.2.3 From 17f910e871e70a5edbf32ea05ef8f68bc71003c9 Mon Sep 17 00:00:00 2001 From: John Paul Adrian Glaubitz Date: Sat, 22 Dec 2018 15:49:16 +0100 Subject: Trans - Fix alignment values for m68k --- src/trans/target.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/trans/target.cpp b/src/trans/target.cpp index 53d84030..316749be 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -42,7 +42,7 @@ const TargetArch ARCH_M68K = { "m68k", 32, true, { /*atomic(u8)=*/true, false, true, false, true }, - TargetArch::Alignments(2, 4, 8, 16, 4, 8, 4) // TODO: Does m68k have lower alignments? + TargetArch::Alignments(2, 2, 2, 2, 2, 2, 2) }; TargetSpec g_target; -- cgit v1.2.3 From cbed0d2930168ef15bfdeb02c6f12991094b1480 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Mon, 21 Jan 2019 23:30:06 +0000 Subject: targets: Add x86_64 and arm targets for Haiku --- src/trans/target.cpp | 14 ++++++++++++++ tools/common/target_detect.h | 9 +++++++++ 2 files changed, 23 insertions(+) (limited to 'src') diff --git a/src/trans/target.cpp b/src/trans/target.cpp index 316749be..70996fb0 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -511,6 +511,20 @@ namespace ARCH_X86_64 }; } + else if(target_name == "arm-unknown-haiku") + { + return TargetSpec { + "unix", "haiku", "gnu", {CodegenMode::Gnu11, true, "arm-unknown-haiku", {}, {}}, + ARCH_ARM32 + }; + } + else if(target_name == "x86_64-unknown-haiku") + { + return TargetSpec { + "unix", "haiku", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-haiku", {}, {}}, + ARCH_X86_64 + }; + } else { ::std::cerr << "Unknown target name '" << target_name << "'" << ::std::endl; diff --git a/tools/common/target_detect.h b/tools/common/target_detect.h index 0812c363..1bfc7dd9 100644 --- a/tools/common/target_detect.h +++ b/tools/common/target_detect.h @@ -75,6 +75,15 @@ // - Apple devices #elif defined(__APPLE__) # define DEFAULT_TARGET_NAME "x86_64-apple-macosx" +// - Haiku +#elif defined(__HAIKU__) +# if defined(__x86_64__) +# define DEFAULT_TARGET_NAME "x86_64-unknown-haiku" +# elif defined(__arm__) +# define DEFAULT_TARGET_NAME "arm-unknown-haiku" +# else +# warning "Unable to detect a suitable default target (Haiku)" +# endif // - Unknown #else # warning "Unable to detect a suitable default target" -- cgit v1.2.3 From 3108cf9eea6dfd801136987568c072f4105b9b7a Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Mon, 4 Feb 2019 18:16:58 +0100 Subject: Fix recv_v128u procedural macro plugin decoder --- src/expand/proc_macro.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/expand/proc_macro.cpp b/src/expand/proc_macro.cpp index d34a91a5..be0b4ce6 100644 --- a/src/expand/proc_macro.cpp +++ b/src/expand/proc_macro.cpp @@ -970,7 +970,7 @@ uint64_t ProcMacroInv::recv_v128u() for(;;) { auto b = recv_u8(); - v |= static_cast(b) << ofs; + v |= static_cast(b & 0x7F) << ofs; if( (b & 0x80) == 0 ) break; ofs += 7; -- cgit v1.2.3 From 0992c4af5242fc95e8cc028c5af7fb86424e624c Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 6 Oct 2018 18:11:40 +0800 Subject: HIR - (minor) Handle equal function pointers when doing fuzzy --- src/hir/hir.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/hir/hir.cpp b/src/hir/hir.cpp index 9f9bc1c3..5d67ac5f 100644 --- a/src/hir/hir.cpp +++ b/src/hir/hir.cpp @@ -450,7 +450,9 @@ namespace { ), (Function, TU_IFLET(::HIR::TypeRef::Data, right.m_data, Function, re, - TODO(sp, "Function"); + if( left == right ) + return ::OrdEqual; + TODO(sp, "Function - " << left << " and " << right); //return typelist_ord_specific(sp, le.arg_types, re.arg_types); ) else { -- cgit v1.2.3