summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmisc/test_yjit_asm.sh2
-rw-r--r--yjit_asm.c10
-rw-r--r--yjit_asm_tests.c9
-rw-r--r--yjit_codegen.c2
-rw-r--r--yjit_iface.h2
5 files changed, 18 insertions, 7 deletions
diff --git a/misc/test_yjit_asm.sh b/misc/test_yjit_asm.sh
index 546acf39c9..1498789246 100755
--- a/misc/test_yjit_asm.sh
+++ b/misc/test_yjit_asm.sh
@@ -3,7 +3,7 @@
set -e
set -x
-clang -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wshorten-64-to-32 yjit_asm.c yjit_asm_tests.c -o asm_test
+clang -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wshorten-64-to-32 yjit_asm_tests.c -o asm_test
./asm_test
diff --git a/yjit_asm.c b/yjit_asm.c
index 15da7a37a1..5e433f5ea4 100644
--- a/yjit_asm.c
+++ b/yjit_asm.c
@@ -78,7 +78,7 @@ x86opnd_t mem_opnd_sib(uint32_t num_bits, x86opnd_t base_reg, x86opnd_t index_re
scale_exp = 0;
break;
default:
- assert(false && "scale not one of 1,2,4,8");
+ rb_bug("yjit: scale not one of 1,2,4,8");
break;
}
@@ -466,7 +466,7 @@ static bool rex_needed(x86opnd_t opnd)
return (opnd.as.mem.base_reg_no > 7) || (opnd.as.mem.has_idx && opnd.as.mem.idx_reg_no > 7);
}
- assert (false);
+ rb_bug("unreachable");
}
// Check if an SIB byte is needed to encode this operand
@@ -643,7 +643,7 @@ static void cb_write_rm(
else if (dsize == 32)
mod = 2;
else
- assert (false);
+ rb_bug("unreachable");
}
// Encode the reg field
@@ -726,7 +726,7 @@ static void write_rm_unary(
if (opnd.type == OPND_REG || opnd.type == OPND_MEM)
opndSize = opnd.num_bits;
else
- assert (false && "invalid operand");
+ rb_bug("yjit: invalid operand");
assert (opndSize == 8 || opndSize == 16 || opndSize == 32 || opndSize == 64);
bool szPref = opndSize == 16;
@@ -856,7 +856,7 @@ static void cb_write_shift(
if (opnd0.type == OPND_REG || opnd0.type == OPND_MEM)
opndSize = opnd0.num_bits;
else
- assert (false && "shift: invalid first operand");
+ rb_bug("yjit: shift: invalid first operand");
assert (opndSize == 16 || opndSize == 32 || opndSize == 64);
bool szPref = opndSize == 16;
diff --git a/yjit_asm_tests.c b/yjit_asm_tests.c
index 5f2376127c..295edb86e5 100644
--- a/yjit_asm_tests.c
+++ b/yjit_asm_tests.c
@@ -6,6 +6,15 @@
#include <string.h>
#include <assert.h>
+// This test executable doesn't compile with the rest of Ruby
+// so we need to define a rb_bug().
+_Noreturn
+static void rb_bug(char *message)
+{
+ fprintf(stderr, "%s\n", message);
+ abort();
+}
+
#include "yjit_asm.c"
// Print the bytes in a code block
diff --git a/yjit_codegen.c b/yjit_codegen.c
index 54fb6df2c1..3b39c043b5 100644
--- a/yjit_codegen.c
+++ b/yjit_codegen.c
@@ -1455,7 +1455,7 @@ jit_chain_guard(enum jcc_kinds jcc, jitstate_t *jit, const ctx_t *ctx, uint8_t d
target0_gen_fn = gen_jbe_to_target0;
break;
default:
- RUBY_ASSERT(false && "unimplemented jump kind");
+ rb_bug("yjit: unimplemented jump kind");
break;
};
diff --git a/yjit_iface.h b/yjit_iface.h
index 5f070fc19f..92443dceb6 100644
--- a/yjit_iface.h
+++ b/yjit_iface.h
@@ -22,8 +22,10 @@ static VALUE *yjit_iseq_pc_at_idx(const rb_iseq_t *iseq, uint32_t insn_idx);
static int yjit_opcode_at_pc(const rb_iseq_t *iseq, const VALUE *pc);
static void yjit_print_iseq(const rb_iseq_t *iseq);
+#if YJIT_STATS
// this function *must* return passed exit_pc
static const VALUE *yjit_count_side_exit_op(const VALUE *exit_pc);
+#endif
static void yjit_unlink_method_lookup_dependency(block_t *block);
static void yjit_block_assumptions_free(block_t *block);