Branch: Tag:

2017-11-04

2017-11-04 11:43:42 by Marcus Comstedt <marcus@mc.pp.se>

ARM32: add missing label

This fixes 5 testsuite failures.

2017-10-12

2017-10-12 06:54:03 by Arne Goedeke <el@laramies.com>

ARM32: added DUP, SWAP and NOT

2017-09-14

2017-09-14 21:39:26 by Arne Goedeke <el@laramies.com>

ARM: remove opcode statistics

There is a similar feature already available when compiling
with debug.

2017-09-13

2017-09-13 04:58:53 by Arne Goedeke <el@laramies.com>

Compiler: do not modify instrs array

2017-03-19

2017-03-19 15:41:08 by Arne Goedeke <el@laramies.com>

Interpreter: merge low_return variants

2017-02-18

2017-02-18 10:44:15 by Arne Goedeke <el@laramies.com>

Interpreter: merge low_return variants

2016-09-25

2016-09-25 19:40:47 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: complete fast check threads

Slow path now only generated once per program.

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: de-inline free_svalue

To reduce code size, we generate a simple free_svalue version
at the beginning of every program. When freeing an svalue, we
jump to that de-inlined version for every type which is reference
counted. This reduces the size of the generated machine code by around
10%.

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: de-inlined F_RETURN

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: some debugging checks

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: removed unused code

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: use Pike_fatal for assert

2016-09-25 19:38:48 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: preliminary check_threads_etc

Uses dedicated register for the fast_check_threads_etc counter but
is generated in too many places for now.

2016-09-25 19:38:48 by Arne Goedeke <el@laramies.com>

ARM32: check if MOVW/MOVH are supported

2016-09-13

2016-09-13 18:41:47 by Arne Goedeke <el@laramies.com>

ARM: merge pike register handling

Most of the register loading and storing is now shared between 32 and 64 bit.

2016-09-13 18:24:08 by Arne Goedeke <el@laramies.com>

ARM: first step at merging arm 32 and 64 bit code base

moved label handling and register allocation into one source file.

2016-09-11

2016-09-11 20:38:29 by Marcus Comstedt <marcus@mc.pp.se>

ARM32 ARM64: Update PC before calling builtins

2016-09-05

2016-09-05 19:29:00 by Arne Goedeke <el@laramies.com>

ARM32: implement F_PRIVATE_GLOBAL(_AND_POP)

2016-09-05 19:27:14 by Arne Goedeke <el@laramies.com>

ARM32: optimize handling of globals

* keep Pike_fp->current_storage in a register
* keep track of whether or not the current object
could have been destructed
* actually start using F_PRIVATE_GLOBAL

2016-09-05 19:09:19 by Arne Goedeke <el@laramies.com>

ARM32: added missing argument to inc/dec opcodes

2016-09-04

2016-09-04 19:05:52 by Arne Goedeke <el@laramies.com>

ARM32: implement F_PRIVATE_GLOBAL

2016-09-03

2016-09-03 10:43:50 by Arne Goedeke <el@laramies.com>

ARM32: added the F_CALL_BUILTIN opcodes

It would be useful to know at assembler time, if a given efun has
a return value or not.

2016-09-03 10:43:50 by Arne Goedeke <el@laramies.com>

ARM32: added INC/DEC opcodes

2016-09-01

2016-09-01 18:26:28 by Arne Goedeke <el@laramies.com>

ARM32: renamed load and store instruction API

This new API with explicit bit widths will make sharing code
between the two arm arches easier.

2016-09-01 07:11:51 by Arne Goedeke <el@laramies.com>

ARM32: F_NE should always return 0 or 1

2016-08-30

2016-08-30 17:24:12 by Arne Goedeke <el@laramies.com>

ARM32: fixed F_LOOP

We cannot rely on the loopcnt always being positive.

2016-08-30 07:30:37 by Arne Goedeke <el@laramies.com>

ARM32: implemented F_LOOP

2016-08-29

2016-08-29 19:38:42 by Arne Goedeke <el@laramies.com>

ARM32: added F_OR_INT, F_AND_INT and F_XOR_INT

2016-08-29 15:54:07 by Arne Goedeke <el@laramies.com>

ARM32: implement F_RETURN_IF_TRUE

2016-08-29 15:54:04 by Arne Goedeke <el@laramies.com>

ARM32: fixed F_EQ/F_NE

The fast path (for everything but objects and functions) was broken
in these two opcodes.

2016-08-29 15:53:16 by Arne Goedeke <el@laramies.com>

ARM32: reordered arguments of lsl_reg_reg

It seems like lsl_reg_reg(dst, a, b) was actually dst = b << a.
This was not intended! These instructions were only used in
the F_EQ/F_NE opcodes where this "error" resulted in the slow
path being executed unconditionally. Also: the fast path is broken.

2016-08-23

2016-08-23 08:59:45 by Arne Goedeke <el@laramies.com>

ARM32: typo

2016-08-23 05:58:51 by Arne Goedeke <el@laramies.com>

ARM32: fix several assert failure

Under some circumstances bad load/store instructions could be generated
for large offsets.

2016-08-23 05:58:16 by Arne Goedeke <el@laramies.com>

ARM32: better versions of F_STRING and F_CONSTANT

2016-08-18

2016-08-18 21:02:35 by Arne Goedeke <el@laramies.com>

ARM32: fix bug in slowpath of integer ops

The slowpath of the integer operations could sometimes change the register
state. This was incorrect because it is not always executed.

2016-08-18 21:02:35 by Arne Goedeke <el@laramies.com>

ARM32: more debug prologues

2016-07-30

2016-07-30 09:37:28 by Arne Goedeke <el@laramies.com>

ARM32: simplify some conditionals

2016-07-30 09:37:26 by Arne Goedeke <el@laramies.com>

ARM32: implement some F_RETURN_* opcodes

2016-07-30 09:37:25 by Arne Goedeke <el@laramies.com>

ARM32: correctly keep track of special registers

Since updating Pike_fp->pc would load the fp_reg, the fp_reg could
sometimes not be correctly invalidated after calling a opcode fun.

2016-07-30 09:37:23 by Arne Goedeke <el@laramies.com>

ARM32: simplify prologue/epilogue generation

We initially thought that we can generate function specific prologues and
epilogues, but this is not the case. Pike code might return through a different
epilogue than the one it entered by. This is unlikely to change.

2016-07-30 09:37:22 by Arne Goedeke <el@laramies.com>

ARM32: fixed svalue type in F_THIS_OBJECT

2016-07-30 09:37:20 by Arne Goedeke <el@laramies.com>

ARM32: introduced aliases for argument registers

2016-07-29

2016-07-29 07:40:10 by Arne Goedeke <el@laramies.com>

ARM32: implement F_THIS_OBJECT and F_SIZEOF_LOCAL

2016-07-29 07:40:10 by Arne Goedeke <el@laramies.com>

ARM32: fix F_PROTECT_STACK

expendibles are stored as an offset in pike_frame now.

2016-07-27

2016-07-27 18:12:17 by Arne Goedeke <el@laramies.com>

ARM32: better disassembler

- improved the output, especially the comments about immediate values
- stop leaking all those strings
- fixed one possibly NULL dereference

2016-07-27 18:12:16 by Arne Goedeke <el@laramies.com>

ARM32: do some checks only during init

2016-07-27 18:12:14 by Arne Goedeke <el@laramies.com>

ARM32: fix some warnings

2016-07-27 18:12:14 by Arne Goedeke <el@laramies.com>

ARM32: some cleanup in disassembler

2016-07-27 18:12:13 by Arne Goedeke <el@laramies.com>

ARM32: r12 is another temporary register

2016-07-27 18:12:12 by Arne Goedeke <el@laramies.com>

ARM32: use NOPs to fill fixed size mov

In some cases we do not know which addr we need to jump to when we have
to generate the instructions. Depending on the value, we might need up
to 2 (or 4 on pre-ARMv7) instructions. So we prefill some space with
NOPs and generate the right instruction sequence later.

2016-07-27 18:12:11 by Arne Goedeke <el@laramies.com>

ARM32: added more CMP opcodes and cleanup

2016-07-11

2016-07-11 06:18:57 by Arne Goedeke <el@laramies.com>

ARM32: work on pre ARMv7

movw and movt are not available in ARMv6. Use less optimal code, instead.
Also added mvn and use that if possible.

2016-07-10

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: don't create opcode stats unconditionally

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_PROTECT_STACK and F_2_LOCALS

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: not broken anymore

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_FILL_STACK

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: labels with backward jumps

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_ASSIGN_LOCAL_AND_POP

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: cleanup

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_STRING

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: renamed some variables

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_MARK_AT

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: cleanup

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_LOCAL

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: keep Pike_fp->locals in r7

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement QUICK and comparison jumps

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: implement OPCODE_INLINE_BRANCH

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: simplify function exits

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: remove c++ style comments

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: added disassembler

- prints all instructions in gdb-style
- resolves and adds jump labels
- interprets pike-related locations and registers

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: add F_ADD_INTS

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: simplify arm32_ins_maybe_exit

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: implement fast paths for comparisons

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: use unsigned compare for pointers

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: added low level support for shift instructions

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: added comparison opcodes

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: really_free_svalue does not change fp or sp

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_POP_TO_MARK

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: implement F_ASSIGN_LOCAL

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: generate better statistics

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: comment about entry/exit

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: save r7

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

Skeleton implementation of AARCH32 (ARM) machine code support

To be extended, also into AARCH64 machine code generation

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: renamed ldr/str to load/store

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: new API with imlicit add_to_program().

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_MARK

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: use arm32_ prefix consistently

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: separate all F_MARK_* opcodes

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: lower case code generators

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: implement F_POP_SVALUE

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

AARCH32: fixed prologues

The prologue which enters into machine code does not necessarily correspond
to the epilogue which will exit from the interpreter. We therefore always
push and pop the same registers. Also, load pike sp/fp only if needed.

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: add arm_call_c_opcode()

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: add cmp_reg_imm

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: use register allocator in arm_push_int()

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: added labels and F_SUBTRACT_INT and F_ADD_INT

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: some comments

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

Further work on AARCH32:

* improved immediate stores
* use store multiple fpr int2sval store
* use register allocator

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: use movw and movt

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: fix the order in _reg_reg opcodes

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: added native integer helper

- arm32_<op>_reg_int will take a 32bit integer as argument and generate one
or more opcodes, possibly by using temporary registers

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: simplify arm32_call_c_opcode()

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: enforce register order in arm32_push_int()

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: add_rel_cond_jmp -> arm32_rel_cond_jmp

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: add debug_instr_prologues

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: add F_MAKE_ITERATOR and F_ADD

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: check if offsets are small enough

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: recod opcode stats

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: arm32_call_efun() helper

We do not need to reload the stack_pointer, it can be inferred from the number
of arguments.

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: use arm32_change_sp

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: always keep Pike_interpreter_pointer->stack_pointer up to date

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: some helpers for sp loading/storing

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: fix F_MARK_AND_CONST1 machine code

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: cleanup

2016-07-10 12:36:29 by Arne Goedeke <el@laramies.com>

ARM32: removed old test code

2016-07-10 12:36:29 by Tobias S. Josefowitz <tobij@tobij.de>

ARM32: implement F_INIT_FRAME

2016-07-06

2016-07-06 17:46:51 by Armisch <arm@armish>

ARM32: don't create opcode stats unconditionally

2016-07-06 17:42:19 by Armisch <arm@armish>

ARM32: implement F_PROTECT_STACK and F_2_LOCALS

2016-07-06 17:41:04 by Armisch <arm@armish>

ARM32: not broken anymore

2016-07-06 17:41:04 by Armisch <arm@armish>

ARM32: implement F_FILL_STACK

2016-07-06 17:41:04 by Armisch <arm@armish>

ARM32: labels with backward jumps

2016-07-06 15:19:34 by Armisch <arm@armish>

ARM32: implement F_ASSIGN_LOCAL_AND_POP

2016-07-06 14:42:10 by Armisch <arm@armish>

ARM32: cleanup

2016-07-06 14:41:45 by Armisch <arm@armish>

ARM32: implement F_STRING

2016-07-06 14:18:10 by Armisch <arm@armish>

ARM32: renamed some variables

2016-07-06 13:43:36 by Armisch <arm@armish>

ARM32: implement F_MARK_AT

2016-07-06 13:36:51 by Armisch <arm@armish>

ARM32: cleanup

2016-07-06 13:15:02 by Armisch <arm@armish>

implement F_LOCAL

2016-07-06 13:15:02 by Armisch <arm@armish>

keep FP->locals in R7

2016-07-06 13:15:02 by Armisch <arm@armish>

save R7

2016-07-06 13:15:01 by Armisch <arm@armish>

arm32_call_c_opcode(): simplify flag processing

2016-07-06 13:15:01 by Armisch <arm@armish>

arm32_push_int(): enforce register order

2016-07-06 13:15:01 by Armisch <arm@armish>

add_rel_cond_jmp -> arm32_rel_cond_jmp

2016-07-06 13:15:01 by Armisch <arm@armish>

tracing support for generated arm32 machine code

2016-07-06 00:05:54 by Armisch <arm@armish>

ARM32: check if offsets are small enough

2016-07-06 00:05:54 by Armisch <arm@armish>

ARM32: add F_MAKE_ITERATOR and F_ADD

2016-07-06 00:05:41 by Armisch <arm@armish>

ARM32: recod opcode stats

2016-07-05

2016-07-05 19:14:58 by Armisch <arm@armish>

arm32_call_efun() helper

2016-07-05 18:39:21 by Armisch <arm@armish>

ARM32: use arm32_change_sp

2016-07-05 18:36:32 by Armisch <arm@armish>

ARM32: always keep Pike_interpreter_pointer->stack_pointer up to date

2016-07-05 18:31:15 by Armisch <arm@armish>

ARM32: some helpers for sp loading/storing

2016-07-05 17:14:25 by Armisch <arm@armish>

fix F_MARK_AND_CONST1 machine code

2016-07-04

2016-07-04 11:06:04 by Armisch <arm@armish>

ARM32: cleanup

2016-07-04 11:02:16 by Armisch <arm@armish>

ARM32: removed old test code

2016-07-04 10:59:37 by Armisch <arm@armish>

ARM32: implement F_INIT_FRAME

2016-07-04 10:28:37 by Armisch <arm@armish>

ARM32: added native integer helper

- arm32_<op>_reg_int will take a 32bit integer as argument and generate one
or more opcodes, possibly by using temporary registers

2016-07-04 09:21:39 by Armisch <arm@armish>

ARM32: fix the order in _reg_reg opcodes

2016-07-03

2016-07-03 23:15:52 by Armisch <arm@armish>

ARM32: use movw and movt

2016-07-03 22:09:29 by Armisch <arm@armish>

ARM32: renamed ldr/str to load/store

2016-07-03 21:19:48 by Armisch <arm@armish>

new API with imlicit add_to_program().

2016-07-03 20:27:22 by Armisch <arm@armish>

ARM32: implement F_MARK

2016-07-03 16:13:06 by Armisch <arm@armish>

use arm32 consistently

2016-07-03 15:50:28 by Armisch <arm@armish>

ARM32: separate all F_MARK_* opcodes

2016-07-03 15:18:59 by Armisch <arm@armish>

lower case code generators

2016-07-03 14:44:42 by Armisch <arm@armish>

new integer arithmetic opcodes need this

2016-07-03 14:44:42 by Armisch <arm@armish>

add arm_call_c_opcode()

2016-07-03 14:44:42 by Armisch <arm@armish>

AARCH32: fixed prologues

The prologue which enters into machine code does not necessarily correspond
to the epilogue which will exit from the interpreter. We therefore always
push and pop the same registers. Also, load pike sp/fp only if needed.

2016-07-03 14:44:42 by Armisch <arm@armish>

ARM32: implement F_POP_SVALUE

2016-07-03 14:44:41 by Armisch <arm@armish>

arm_push_int(): use register allocator

2016-07-03 14:44:41 by Armisch <arm@armish>

added label support and F_SUBTRACT_INT and F_ADD_INT

2016-07-03 14:44:41 by Armisch <arm@armish>

some comments

2016-07-03 14:44:41 by Arne Goedeke <el@laramies.com>

Further work on AARCH32:

* improved immediate stores
* use store multiple fpr int2sval store
* use register allocator

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>

2016-07-03 14:44:40 by Tobias S. Josefowitz <tobij@tobij.de>

Skeleton implementation of AARCH32 (ARM) machine code support

To be extended, also into AARCH64 machine code generation

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>

2015-01-05

2015-01-05 16:26:09 by Arne Goedeke <el@laramies.com>

Further work on AARCH32:

* improved immediate stores
* use store multiple fpr int2sval store
* use register allocator

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>

2014-12-07

2014-12-07 14:44:58 by Tobias S. Josefowitz <tobij@tobij.de>

Skeleton implementation of AARCH32 (ARM) machine code support

To be extended, also into AARCH64 machine code generation

Author: Arne Goedeke <el@laramies.com>
Author: Tobias S. Josefowitz <tobij@tobij.de>