summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-02-24 23:10:20 +1100
committerDamien George <damien.p.george@gmail.com>2018-02-24 23:10:20 +1100
commitc0bcf00ed100181a532240d904395de11addcd33 (patch)
tree0b706563c9c5f74a5912abe4878def2e06fcdbd3 /py
parent7dfa56e40e9c343cbf4a1726a4babecc69a6b732 (diff)
py/asm*.c: Remove unnecessary check for num_locals<0 in asm entry func.
All callers of the asm entry function guarantee that num_locals>=0, so no need to add an explicit check for it. Use an assertion instead. Also, the signature of asm_x86_entry is changed to match the other asm entry functions.
Diffstat (limited to 'py')
-rw-r--r--py/asmarm.c5
-rw-r--r--py/asmthumb.c5
-rw-r--r--py/asmx64.c4
-rw-r--r--py/asmx86.c3
-rw-r--r--py/asmx86.h2
5 files changed, 7 insertions, 12 deletions
diff --git a/py/asmarm.c b/py/asmarm.c
index 552fdfb34..1a8923bc2 100644
--- a/py/asmarm.c
+++ b/py/asmarm.c
@@ -150,10 +150,7 @@ void asm_arm_bkpt(asm_arm_t *as) {
// | low address | high address in RAM
void asm_arm_entry(asm_arm_t *as, int num_locals) {
-
- if (num_locals < 0) {
- num_locals = 0;
- }
+ assert(num_locals >= 0);
as->stack_adjust = 0;
as->push_reglist = 1 << ASM_ARM_REG_R1
diff --git a/py/asmthumb.c b/py/asmthumb.c
index 5316a7efb..c5b45f2f5 100644
--- a/py/asmthumb.c
+++ b/py/asmthumb.c
@@ -104,6 +104,8 @@ STATIC void asm_thumb_write_word32(asm_thumb_t *as, int w32) {
// | low address | high address in RAM
void asm_thumb_entry(asm_thumb_t *as, int num_locals) {
+ assert(num_locals >= 0);
+
// work out what to push and how many extra spaces to reserve on stack
// so that we have enough for all locals and it's aligned an 8-byte boundary
// we push extra regs (r1, r2, r3) to help do the stack adjustment
@@ -111,9 +113,6 @@ void asm_thumb_entry(asm_thumb_t *as, int num_locals) {
// for push rlist, lowest numbered register at the lowest address
uint reglist;
uint stack_adjust;
- if (num_locals < 0) {
- num_locals = 0;
- }
// don't pop r0 because it's used for return value
switch (num_locals) {
case 0:
diff --git a/py/asmx64.c b/py/asmx64.c
index aa2a8ec7c..c900a08d1 100644
--- a/py/asmx64.c
+++ b/py/asmx64.c
@@ -526,11 +526,9 @@ void asm_x64_jcc_label(asm_x64_t *as, int jcc_type, mp_uint_t label) {
}
void asm_x64_entry(asm_x64_t *as, int num_locals) {
+ assert(num_locals >= 0);
asm_x64_push_r64(as, ASM_X64_REG_RBP);
asm_x64_mov_r64_r64(as, ASM_X64_REG_RBP, ASM_X64_REG_RSP);
- if (num_locals < 0) {
- num_locals = 0;
- }
num_locals |= 1; // make it odd so stack is aligned on 16 byte boundary
asm_x64_sub_r64_i32(as, ASM_X64_REG_RSP, num_locals * WORD_SIZE);
asm_x64_push_r64(as, ASM_X64_REG_RBX);
diff --git a/py/asmx86.c b/py/asmx86.c
index 6a78fbd5e..3938baaac 100644
--- a/py/asmx86.c
+++ b/py/asmx86.c
@@ -387,7 +387,8 @@ void asm_x86_jcc_label(asm_x86_t *as, mp_uint_t jcc_type, mp_uint_t label) {
}
}
-void asm_x86_entry(asm_x86_t *as, mp_uint_t num_locals) {
+void asm_x86_entry(asm_x86_t *as, int num_locals) {
+ assert(num_locals >= 0);
asm_x86_push_r32(as, ASM_X86_REG_EBP);
asm_x86_mov_r32_r32(as, ASM_X86_REG_EBP, ASM_X86_REG_ESP);
if (num_locals > 0) {
diff --git a/py/asmx86.h b/py/asmx86.h
index bd5895453..09559850c 100644
--- a/py/asmx86.h
+++ b/py/asmx86.h
@@ -104,7 +104,7 @@ void asm_x86_test_r8_with_r8(asm_x86_t* as, int src_r32_a, int src_r32_b);
void asm_x86_setcc_r8(asm_x86_t* as, mp_uint_t jcc_type, int dest_r8);
void asm_x86_jmp_label(asm_x86_t* as, mp_uint_t label);
void asm_x86_jcc_label(asm_x86_t* as, mp_uint_t jcc_type, mp_uint_t label);
-void asm_x86_entry(asm_x86_t* as, mp_uint_t num_locals);
+void asm_x86_entry(asm_x86_t* as, int num_locals);
void asm_x86_exit(asm_x86_t* as);
void asm_x86_mov_arg_to_r32(asm_x86_t *as, int src_arg_num, int dest_r32);
void asm_x86_mov_local_to_r32(asm_x86_t* as, int src_local_num, int dest_r32);