Skip to content

Commit 62db396

Browse files
committed
make compilation work with Apple LLVM compiler by having jl_box_int8() and jl_box_uint8() work with full size integers (one register) and forcing the bit cast in C (also generates less assembly code overall!)
1 parent 72253b6 commit 62db396

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

src/alloc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,14 +697,14 @@ UIBOX_FUNC(uint64, uint64_t, 3)
697697
#endif
698698

699699
static jl_value_t *boxed_int8_cache[256];
700-
jl_value_t *jl_box_int8(int8_t x)
700+
jl_value_t *jl_box_int8(int32_t x)
701701
{
702702
return boxed_int8_cache[(uint8_t)x];
703703
}
704704
static jl_value_t *boxed_uint8_cache[256];
705-
jl_value_t *jl_box_uint8(uint8_t x)
705+
jl_value_t *jl_box_uint8(uint32_t x)
706706
{
707-
return boxed_uint8_cache[x];
707+
return boxed_uint8_cache[(uint8_t)x];
708708
}
709709

710710
void jl_init_int32_int64_cache(void)

src/intrinsics.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -718,8 +718,8 @@ static void add_intrinsic(const std::string &name, intrinsic f)
718718
}
719719

720720
#define ADD_I(name) add_intrinsic(#name, name)
721-
#define BOX_F(ct) \
722-
box_##ct##_func = boxfunc_llvm(ft1arg(jl_pvalue_llvmt, T_##ct), \
721+
#define BOX_F(ct,jl_ct) \
722+
box_##ct##_func = boxfunc_llvm(ft1arg(jl_pvalue_llvmt, T_##jl_ct), \
723723
"jl_box_"#ct, (void*)&jl_box_##ct);
724724

725725
extern "C" void jl_init_intrinsic_functions()
@@ -762,12 +762,12 @@ extern "C" void jl_init_intrinsic_functions()
762762
ADD_I(copysign_float32); ADD_I(copysign_float64);
763763
ADD_I(ccall);
764764

765-
BOX_F(int8); BOX_F(uint8);
766-
BOX_F(int16); BOX_F(uint16);
767-
BOX_F(int32); BOX_F(uint32);
768-
BOX_F(int64); BOX_F(uint64);
769-
BOX_F(float32); BOX_F(float64);
770-
BOX_F(char);
765+
BOX_F(int8,int32); BOX_F(uint8,uint32);
766+
BOX_F(int16,int16); BOX_F(uint16,uint16);
767+
BOX_F(int32,int32); BOX_F(uint32,uint32);
768+
BOX_F(int64,int64); BOX_F(uint64,uint64);
769+
BOX_F(float32,float32); BOX_F(float64,float64);
770+
BOX_F(char,char);
771771

772772
box8_func = boxfunc_llvm(ft2arg(jl_pvalue_llvmt, jl_pvalue_llvmt, T_int8),
773773
"jl_box8", (void*)*jl_box8);

src/julia.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,8 @@ void jl_add_method(jl_function_t *gf, jl_tuple_t *types, jl_function_t *meth);
575575
jl_value_t *jl_method_def(jl_sym_t *name, jl_value_t **bp, jl_binding_t *bnd,
576576
jl_tuple_t *argtypes, jl_function_t *f);
577577
jl_value_t *jl_box_bool(int8_t x);
578-
jl_value_t *jl_box_int8(int8_t x);
579-
jl_value_t *jl_box_uint8(uint8_t x);
578+
jl_value_t *jl_box_int8(int32_t x);
579+
jl_value_t *jl_box_uint8(uint32_t x);
580580
jl_value_t *jl_box_int16(int16_t x);
581581
jl_value_t *jl_box_uint16(uint16_t x);
582582
DLLEXPORT jl_value_t *jl_box_int32(int32_t x);

0 commit comments

Comments
 (0)