Fix missing float cmp for XIP (#1699)

This commit is contained in:
Huang Qi
2022-11-14 11:58:38 +08:00
committed by GitHub
parent cef4e74fee
commit 4b0660cf24
4 changed files with 68 additions and 6 deletions

View File

@ -72,6 +72,8 @@ static const aot_intrinsic g_intrinsic_mapping[] = {
{ "i64.div_u", "aot_intrinsic_i64_div_u", AOT_INTRINSIC_FLAG_I64_DIV_U},
{ "i64.rem_s", "aot_intrinsic_i64_rem_s", AOT_INTRINSIC_FLAG_I64_REM_S},
{ "i64.rem_u", "aot_intrinsic_i64_rem_u", AOT_INTRINSIC_FLAG_I64_REM_U},
{ "i64.or", "aot_intrinsic_i64_bit_or", AOT_INTRINSIC_FLAG_I64_BIT_OR},
{ "i64.and", "aot_intrinsic_i64_bit_and", AOT_INTRINSIC_FLAG_I64_BIT_AND},
};
/* clang-format on */
@ -524,6 +526,18 @@ aot_intrinsic_i64_rem_u(uint64 l, uint64 r)
return l % r;
}
uint64
aot_intrinsic_i64_bit_or(uint64 l, uint64 r)
{
return l | r;
}
uint64
aot_intrinsic_i64_bit_and(uint64 l, uint64 r)
{
return l & r;
}
const char *
aot_intrinsic_get_symbol(const char *llvm_intrinsic)
{
@ -558,6 +572,8 @@ add_i64_common_intrinsics(AOTCompContext *comp_ctx)
add_intrinsic_capability(comp_ctx, AOT_INTRINSIC_FLAG_I64_DIV_U);
add_intrinsic_capability(comp_ctx, AOT_INTRINSIC_FLAG_I64_REM_S);
add_intrinsic_capability(comp_ctx, AOT_INTRINSIC_FLAG_I64_REM_U);
add_intrinsic_capability(comp_ctx, AOT_INTRINSIC_FLAG_I64_BIT_OR);
add_intrinsic_capability(comp_ctx, AOT_INTRINSIC_FLAG_I64_BIT_AND);
}
static void

View File

@ -93,6 +93,8 @@ extern "C" {
#define AOT_INTRINSIC_FLAG_I64_DIV_U AOT_INTRINSIC_FLAG(1, 29)
#define AOT_INTRINSIC_FLAG_I64_REM_S AOT_INTRINSIC_FLAG(1, 30)
#define AOT_INTRINSIC_FLAG_I64_REM_U AOT_INTRINSIC_FLAG(1, 31)
#define AOT_INTRINSIC_FLAG_I64_BIT_OR AOT_INTRINSIC_FLAG(1, 32)
#define AOT_INTRINSIC_FLAG_I64_BIT_AND AOT_INTRINSIC_FLAG(1, 33)
/* clang-format on */
@ -267,6 +269,12 @@ aot_intrinsic_i64_rem_s(int64 l, int64 r);
uint64
aot_intrinsic_i64_rem_u(uint64 l, uint64 r);
uint64
aot_intrinsic_i64_bit_or(uint64 l, uint64 r);
uint64
aot_intrinsic_i64_bit_and(uint64 l, uint64 r);
const char *
aot_intrinsic_get_symbol(const char *llvm_intrinsic);

View File

@ -112,6 +112,8 @@ typedef struct {
REG_SYM(aot_intrinsic_i64_div_u), \
REG_SYM(aot_intrinsic_i64_rem_s), \
REG_SYM(aot_intrinsic_i64_rem_u), \
REG_SYM(aot_intrinsic_i64_bit_or), \
REG_SYM(aot_intrinsic_i64_bit_and), \
REG_SYM(aot_intrinsic_i32_div_u), \
#define REG_COMMON_SYMBOLS \