diff --git a/py/asmx64.c b/py/asmx64.c index c023900a8f..2c56f35c99 100644 --- a/py/asmx64.c +++ b/py/asmx64.c @@ -5,7 +5,6 @@ #include #include "misc.h" -#include "mpconfig.h" #include "asmx64.h" /* all offsets are measured in multiples of 8 bytes */ @@ -603,7 +602,12 @@ void asm_x64_call_i1(asm_x64_t* as, void* func, int i1) */ void asm_x64_call_ind(asm_x64_t* as, void *ptr, int temp_r64) { - asm_x64_mov_i64_to_r64_optimised(as, (machine_int_t)ptr, temp_r64); +#ifdef __LP64__ + asm_x64_mov_i64_to_r64_optimised(as, (int64_t)ptr, temp_r64); +#else + // If we get here, sizeof(int) == sizeof(void*). + asm_x64_mov_i64_to_r64_optimised(as, (int64_t)(unsigned int)ptr, temp_r64); +#endif asm_x64_write_byte_2(as, OPCODE_CALL_RM32, MODRM_R64(2) | MODRM_RM_REG | MODRM_RM_R64(temp_r64)); // this reduces code size by 2 bytes per call, but doesn't seem to speed it up at all // doesn't work anymore because calls are 64 bits away diff --git a/py/showbc.c b/py/showbc.c index 600d497960..b063c846ac 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -283,12 +283,12 @@ void mp_show_byte_code(const byte *ip, int len) { case MP_BC_BUILD_SET: DECODE_UINT; - printf("BUILD_SET %lu", unum); + printf("BUILD_SET " UINT_FMT, unum); break; case MP_BC_SET_ADD: DECODE_UINT; - printf("SET_ADD %lu", unum); + printf("SET_ADD " UINT_FMT, unum); break; case MP_BC_UNPACK_SEQUENCE: diff --git a/stm/Makefile b/stm/Makefile index c61900e3d1..0bbc10af50 100644 --- a/stm/Makefile +++ b/stm/Makefile @@ -171,6 +171,9 @@ $(BUILD)/%.o: $(CC3KSRC)/%.c $(BUILD)/%.o: $(PYSRC)/%.s $(AS) -o $@ $< +$(BUILD)/%.o: $(PYSRC)/%.S + $(CC) $(CFLAGS) -c -o $@ $< + $(BUILD)/%.o: $(PYSRC)/%.c mpconfig.h $(CC) $(CFLAGS) -c -o $@ $< diff --git a/unix-cpy/Makefile b/unix-cpy/Makefile index 475b6bd9d4..29ccb32773 100644 --- a/unix-cpy/Makefile +++ b/unix-cpy/Makefile @@ -9,6 +9,7 @@ SRC_C = \ main.c \ PY_O = \ + nlrx86.o \ nlrx64.o \ malloc.o \ qstr.o \ @@ -57,13 +58,13 @@ $(PROG): $(BUILD) $(OBJ) $(CC) -o $@ $(OBJ) $(LIB) $(LDFLAGS) $(BUILD): - mkdir $@ + mkdir -p $@ $(BUILD)/%.o: %.c $(CC) $(CFLAGS) -c -o $@ $< -$(BUILD)/%.o: $(PYSRC)/%.s - $(AS) -o $@ $< +$(BUILD)/%.o: $(PYSRC)/%.S + $(CC) $(CFLAGS) -c -o $@ $< $(BUILD)/%.o: $(PYSRC)/%.c mpconfig.h $(CC) $(CFLAGS) -c -o $@ $< diff --git a/unix-cpy/mpconfig.h b/unix-cpy/mpconfig.h index 9fe8a7ac2e..db72b31455 100644 --- a/unix-cpy/mpconfig.h +++ b/unix-cpy/mpconfig.h @@ -8,10 +8,22 @@ // type definitions for the specific machine -#define BYTES_PER_WORD (8) +#ifdef __LP64__ +typedef long machine_int_t; // must be pointer size +typedef unsigned long machine_uint_t; // must be pointer size +#define UINT_FMT "%lu" +#define INT_FMT "%ld" +#else +// These are definitions for machines where sizeof(int) == sizeof(void*), +// regardless for actual size. +typedef int machine_int_t; // must be pointer size +typedef unsigned int machine_uint_t; // must be pointer size +#define UINT_FMT "%u" +#define INT_FMT "%d" +#endif + +#define BYTES_PER_WORD sizeof(machine_int_t) -typedef int64_t machine_int_t; // must be pointer size -typedef uint64_t machine_uint_t; // must be pointer size typedef void *machine_ptr_t; // must be of pointer size typedef const void *machine_const_ptr_t; // must be of pointer size typedef double machine_float_t; diff --git a/unix/Makefile b/unix/Makefile index 91d05a2ec2..f191044421 100644 --- a/unix/Makefile +++ b/unix/Makefile @@ -72,9 +72,6 @@ $(BUILD): $(BUILD)/%.o: %.c $(CC) $(CFLAGS) -c -o $@ $< -$(BUILD)/%.o: $(PYSRC)/%.s - $(AS) -o $@ $< - $(BUILD)/%.o: $(PYSRC)/%.S $(CC) $(CFLAGS) -c -o $@ $<