Browse source

Changelog

Query
From:
To:
Branch:
Path:
Message:
BugID:
User: +
Format:
: 1 checkin (+1157/-730) by Per Hedbor <ph@opera.com> Lines added/removed recently

Tuesday 12 June 2012

2012-06-12 23:16:15 (1 decade ago) by Per Hedbor <ph@opera.com>

Rewrote x86_64/AMD64 native code generation.

De-macrofied the generator to make it at least somewhat easier to
read, also attempted to make the opcode implementations easier to
understand (at least if you have a copy of the Intel Software
Developer's Manual in front of you.

There are known issues with some opcodes, mot all mov_* work with all
registers as arguments (due to the x86 instruction encoding for
register&7==[3,4])

Added a few more instructions, and changed some occurences of things
like 'mov $4, eax; mov eax,[ecx+off]' to 'mov $4,[ecx+off]'.

Added a simple branch/label system to make it somewhat easier to write
more complex opcodes.

Inlined or partially inlined some opcodes:

THIS_OBJECT, ASSIGN_LOCAL, ASSIGN_LOCAL_AND_POP, ASSIGN_GLOBAL,
ASSIGN_GLOBAL_AND_POP, POP_VALUE, SIZEOF_LOCAL, CONSTANT,
GLOBAL_LVALUE, LOCAL_LVALUE, BRANCH_IF[_NOT]_LOCAL and fixed INIT_FRAME.

Changed handling of 'check_threads_etc', it is now only called every
1024 branches (or, like normal, when functions are called).

Overall pure pike-code execution is about 20% faster.

[permalink]

Bugs? Suggestions?