Slava Pestov
4175585fd4
Merge branch 'master' into dcn
2009-07-28 11:20:43 -05:00
Joe Groff
5372113fce
SSE1–SSSE3 opcodes + branch hints for x86 assembler
2009-07-28 00:22:27 -05:00
Slava Pestov
bfb2a4c1fc
cpu.x86: compile a load of zero, and adds, subs where dst = src1 more efficiently
2009-07-27 22:27:54 -05:00
Slava Pestov
3fb4fc1bde
Improve code generation for shift word: add intrinsics for fixnum-shift-fast in the case where the shift count is not constant, transform 1 swap shift into a more overflow check with open-coded fast case, transform bitand into fixnum-bitand in more cases
2009-07-16 23:50:48 -05:00
Slava Pestov
e76dce8aff
Overflowing fixnum intrinsics now expand into several CFG nodes. This speeds up the common case since only the uncommon case is now a stack syncpoint
2009-07-16 18:29:40 -05:00
Slava Pestov
768e2a5148
compiler.cfg: split off condition codes into a comparisons sub-vocabulary
2009-07-13 14:42:52 -05:00
Slava Pestov
1157f58f37
cpu.x86.32: don't emit sub %esp,0x0 in prologue on Linux and Windows
2009-07-01 18:13:45 -05:00
Slava Pestov
4db44cd23f
%dispatch: sometimes the generated sequence is one byte longer, so instead of hard-coding it, compute the right length
2009-06-30 18:11:15 -05:00
Slava Pestov
fc6c9e2dfd
cpu.x86: don't clobber src in %dispatch
2009-06-30 16:47:22 -05:00
Slava Pestov
45a2105449
cpu.x86.assembler: IMUL2 instruction was busted for immediate operands
...
When given a register and an immediate, it would generate imul imm,dst,dst however the 64-bit prefix was generated wrong and if dst was an extended register only the first operand would be an extended register. To fix this, change IMUL2 to not work on immediates anymore, and added a new IMUL3 that takes a destination register, source register, and immediate. Also, change compiler.cfg.two-operand to not two-operandize %mul-imm, since this isn't needed anymore.
This fixes the sporadic benchmark.tuple-arrays crash on 64-bit machines.
2009-06-08 21:15:52 -05:00
Slava Pestov
9ad9600764
Remove %dispatch-label since its tehe same on all platforms; fix %gc on PowerPC
2009-06-07 21:46:28 -05:00
Slava Pestov
49f670be05
Fix 32-bit bootstrap
2009-06-03 03:23:55 -05:00
Slava Pestov
ade5db2405
cpu.x86: fix small register intrinsics on x86-64
2009-06-03 03:22:46 -05:00
Slava Pestov
2d231f066a
GC checks now save and restore registers
2009-06-02 18:23:47 -05:00
Slava Pestov
9e987e8642
Merge branch 'master' into global_optimization
2009-06-01 03:12:32 -05:00
Slava Pestov
b389dcf441
Redo compiler.codegen.fixup and get %dispatch to work
2009-06-01 02:32:36 -05:00
Slava Pestov
fc152ef210
Various improvements aimed at getting local optimization regressions fixed:
...
- Rename _gc to ##gc
- Absolute labels are now supported
- Generate _dispatch-label
2009-05-31 23:28:08 -05:00
Slava Pestov
617e57fc75
cpu.x86.features: add RDTSC support. This is a new vocabulary with words: sse2? instruction-counter count-instructions
2009-05-31 15:02:14 -05:00
Slava Pestov
76d74c16af
Fixing various bugs; alias analysis wasn't handling ##phi nodes, stack analysis incorrectly handled height-changing back edges and ##fixnum-*, clean up ##dispatch generation
2009-05-29 01:39:14 -05:00
U-C4\Administrator
02b769475b
fix duplicate using lines
2009-05-17 20:29:32 -05:00
Slava Pestov
63b963e12a
Fix x86-64 backend
2009-05-07 16:58:18 -05:00
Slava Pestov
3591f6c684
Count megamorphic cache hits
2009-05-07 14:26:08 -05:00
Slava Pestov
318552ba60
Fix tail call PICs on x86-64
2009-05-06 22:44:30 -05:00
Slava Pestov
4915e1ced7
Clean up bootstrap.image, and implement new calling convention for tail calls; tail call sites now have PICs
2009-05-06 22:04:01 -05:00
Slava Pestov
12a34d81f7
JIT now supports multiple relocations per code template. This simplifies non-optimizing compiler backends
2009-05-06 20:04:49 -05:00
Slava Pestov
581d017b46
Working on inline caching for tail call sites
2009-05-06 19:22:22 -05:00
Slava Pestov
c93d876075
Better separation of concerns: cpu.{x86,ppc}.assembler no longer depends on compiler.codegen.fixup and cpu.architecture. Rename rt-xt-direct to rt-xt-pic to better explain its purpose
2009-05-06 16:14:53 -05:00
Slava Pestov
867ff51b83
Remove some unused constants and update an obsolete comment
2009-05-06 14:57:17 -05:00
Slava Pestov
50826084f0
cpu.x86.bootstrap: remove obsolete comment
2009-05-05 20:56:44 -05:00
Slava Pestov
e9e095f240
Rename enable/disable-compiler to enable/disable-optimizer, and add with-optimizer and without-optimizer combinators
2009-05-01 05:52:05 -05:00
Slava Pestov
742d574162
Non-optimizing compiler doesn't need to optimize 'dispatch' primitive anymore since its rarely used
2009-04-30 19:42:08 -05:00
Slava Pestov
f9ec0a07c5
Fix PICs for x86-64
2009-04-30 18:00:49 -05:00
Slava Pestov
5c9dc6d753
Tag-only PIC checks would always miss
2009-04-30 06:41:37 -05:00
Slava Pestov
5fb5c19d61
Machine code is now stored in a byte array instead of an array for add_code_block()
2009-04-30 04:34:35 -05:00
Slava Pestov
59d6131c7c
Bum 3 instructions out of megamorphic fast path by switching to fixed-size caches
2009-04-30 04:14:14 -05:00
Slava Pestov
515c619202
Non-optimizing compiler now open-codes megamorphic dispatch fast path
2009-04-30 03:37:07 -05:00
Slava Pestov
62db617927
Get rid of two instructions from tag pics and one instruction from all others
2009-04-29 22:24:28 -05:00
Slava Pestov
5188f4e1f0
Fix TEST opcode in cpu.x86.assembler
2009-04-29 22:23:42 -05:00
Slava Pestov
bd186b6320
Eliminate 3 instructions from PIC fast path
2009-04-29 21:32:05 -05:00
Slava Pestov
38a38a57a9
Fix hi-tag-or-tuple PICs
2009-04-29 03:00:09 -05:00
Slava Pestov
9243316489
Debugging inline caching
2009-04-28 23:05:18 -05:00
Slava Pestov
c15a4c1c5a
Add new relocation type for call sites which may be replaced by ICs
2009-04-28 17:53:14 -05:00
Slava Pestov
4d10105802
Working on inline caching
2009-04-28 03:48:37 -05:00
Slava Pestov
7e84daf0f1
Move (execute) to kernel.private
2009-04-26 02:42:37 -05:00
Slava Pestov
76281235e7
bootstrap.image: clean up jit-define and define-sub-primitive so that
2009-04-25 22:35:19 -05:00
Slava Pestov
27c84e89fe
Working on faster (execute)
2009-04-25 21:14:59 -05:00
Slava Pestov
0f0218b209
Fix some compile warnings in bootstrap
2009-04-17 17:53:26 -05:00
Slava Pestov
ea60f8ae93
Changing : foo ; parsing to SYNTAX: foo ;
2009-03-21 01:27:50 -05:00
Slava Pestov
7f4c967ace
More compact relocation layout
2009-03-19 20:02:43 -05:00
Slava Pestov
bf41b187b0
Re-organize code so that with-compilation-unit can infer
...
Fix with-compilation-unit to work in deployed code
2009-03-13 19:39:32 -05:00
Slava Pestov
6b25e99470
Add summary for heaps more vocabs
2009-02-16 21:05:13 -06:00
Slava Pestov
6b99b04531
Add vocab: for vocab-relative paths
2009-02-15 19:53:21 -06:00
sheeple
3c1ddde1f9
Fix complex float support on NetBSD
2009-02-12 08:10:21 -06:00
sheeple
facd455e92
Working on complex float support in FFI on NetBSD
2009-02-12 06:25:07 -06:00
Slava Pestov
44bfff7c7b
Rename ##load-indirect to ##load-reference since this is more descriptive; value numbering doesn't assign expressions to ##load-reference nodes since this would end up folding literals which were eq? but not =
2009-01-29 01:44:58 -06:00
Slava Pestov
34792a9f23
Remove >r/r>
2008-12-17 19:17:37 -06:00
Slava Pestov
c5160d76e9
Merge qualified, alias, symbols, constants into core
2008-12-17 18:10:01 -06:00
Slava Pestov
0021cde743
Fix more compile errors
2008-12-15 22:21:56 -06:00
Slava Pestov
5a45119252
Fix jit-dispatch on x86-64; was broken on windows
2008-12-15 20:55:24 -06:00
Slava Pestov
d821cd7281
Fix win64 bootstrap
2008-12-10 01:19:22 -06:00
Slava Pestov
4b927f732f
Clean up JIT backend a little
2008-12-09 17:14:17 -06:00
Slava Pestov
05e4626c49
Clean up
2008-12-09 03:22:09 -06:00
Slava Pestov
8a8f0c925c
Use BSR instruction to implement fixnum-log2 intrinsic
2008-12-06 15:31:17 -06:00
Slava Pestov
a56d480aa6
Various optimizations leading to a 10% speedup on compiling empty EBNF parser:
...
- open-code getenv primitive
- inline tuple predicates in finalization
- faster partial dispatch
- faster built-in type predicates
- faster tuple predicates
- faster lo-tag dispatch
- compile V{ } clone and H{ } clone more efficiently
- add fixnum fast-path to =; avoid indirect branch if two fixnums not eq
- faster >alist on hashtables
2008-12-06 09:16:29 -06:00
Slava Pestov
82cf6530c6
set-string-nth-fast intrinsic was busted
2008-12-05 23:52:09 -06:00
Slava Pestov
e256846acd
Tweak string representation; high bit indicates if character has high bits in aux vector. Avoids memory access in common case. Split set-string-nth into two primitives; set-string-nth-fast is open-coded by optimizing compiler. 13% improvement on reverse-complement
2008-12-05 06:38:51 -06:00
Slava Pestov
e5ed7447ed
Removing more >r/r> usages
2008-12-03 08:46:16 -06:00
Slava Pestov
e4db2afb7e
Update cpu.x86.assembler to use dip instead of >r/r>
2008-12-02 03:10:01 -06:00
Slava Pestov
a558f91d5d
Better command-line processing
2008-12-01 16:10:48 -06:00
Slava Pestov
3e25d14e54
Code cleanup: refactoring usages of rot and -rot to use newer idioms instead
2008-11-30 17:47:29 -06:00
Slava Pestov
c7c3bbc5f5
Fix register assignments on 64-bit x86
2008-11-30 08:05:36 -06:00
Slava Pestov
e7f4563374
fixnum* intrinsic for x86
2008-11-30 07:26:49 -06:00
U-SLAVA-DFB8FF805\Slava
6f0ec04310
Fix stack effect of param-reg-[12] on x86.3C2
2008-11-24 19:09:55 -06:00
Slava Pestov
eb8c621b6f
Faster generic arithmetic on fiixnums: both-fixnums? sub-primitive performs a check if the top two stack items are both fixnums with a single conditional branch
2008-11-28 08:35:02 -06:00
Slava Pestov
f44506089d
More work on overflow instructions: don't need temp register anymore, add -tail variants which don't need stack frame
2008-11-28 06:36:30 -06:00
Slava Pestov
5634becda1
##fixnum-add, ##fixnum-sub instructions open-code overflow check
2008-11-28 05:33:58 -06:00
Slava Pestov
6dfce7d4e7
load-locals is a primitive now, change semantics of get-locals to bum out 2 instructions from the sub-primitive
2008-11-27 22:30:29 -06:00
Slava Pestov
12d4f684ec
Fix <long>, <ulong>, *long, *ulong on win64
2008-11-24 16:28:56 -06:00
Slava Pestov
ab689c098b
Clean up direct literal code and make a first attempt at PowerPC support
2008-11-24 08:16:14 -06:00
Slava Pestov
2aaf860f47
Experimental optimizations
2008-11-24 06:40:51 -06:00
Slava Pestov
d86524f4bc
Non-optimizing compiler now compiles dip, 2dip, 3dip, if, with direct branches instead of indirect branches. 8% bootstrap time improvement on Core Duo 2
2008-11-24 00:23:17 -06:00
Slava Pestov
a4d9cdfeb3
Refactor all usages of >r/r> in core to use dip, 2dip, 3dip
...
Non-optimizing compiler now special-cases dip, 2dip, 3dip following a
literal quotation: this allows us to break the dip/slip meta-circle
without explicit calls to >r/r>
2008-11-23 02:44:56 -06:00
Slava Pestov
303b3f2f83
Fix compile error in x86 bootstrap
2008-11-23 00:09:23 -06:00
Slava Pestov
ae4f9a2809
Add fixnum/mod-fast and fixnum/i-fast subprimitives
2008-11-21 02:11:36 -06:00
unknown
ccd13ce975
Define intptr_t type
2008-11-17 18:42:10 -06:00
Slava Pestov
20f5541d35
Refactoring FFI for Win64
2008-11-17 13:34:37 -06:00
Slava Pestov
eb05dd3a12
Optimize a ##dispatch that is applied to the result of a ##sub-imm or ##add-imm; this eliminates an instruction from the common 1 fixnum-fast { ... } dispatch and 8 fixnum-fast { ... } dispatch code sequences appearing in generic word expansions
2008-11-13 04:16:08 -06:00
Slava Pestov
cfa82cb474
New calling convention for VM primitives:
...
instead of the Factor side passing the stack pointer as the first parameter, and having the VM save it to stack_chain->top, we instead have the Factor side save it. Eliminates a lot of crud in the VM
2008-11-13 03:20:34 -06:00
Slava Pestov
28e397420d
Fix USING:
2008-11-08 21:43:55 -06:00
unknown
f7fe84e563
Working on Win64 FFI
2008-11-08 21:40:47 -06:00
Slava Pestov
9cc193ea5b
Add unportable tags and fix my-arch word
2008-11-07 22:37:40 -06:00
Slava Pestov
eb83b542d6
Fix unix x86.64 bootstrap
2008-11-07 21:54:13 -06:00
unknown
7365959f01
Starting work on Win64 port
2008-11-07 20:33:32 -06:00
Slava Pestov
9366ad650d
Add unportable tag
2008-11-06 09:29:21 -06:00
sheeple
d2ec46e38f
PowerPC backend almost functional; some new compiler unit tests added,
...
better compilation of 'f eq?'; f becomes an immediate operand
move aux-offset to compiler.constants
2008-11-06 06:27:27 -06:00
Slava Pestov
53cd75b06c
Add string-nth intrinsic
2008-11-06 01:11:28 -06:00
Slava Pestov
8b7c47a68b
Clean up x86 backend: move cpu.x86.architecture to cpu.x86, use branchless arithmetic in some intrinsics
2008-11-05 04:15:48 -06:00
Slava Pestov
59f4f25b91
Loop alignment: appears to be a small win for reverse-complement
2008-11-03 06:20:51 -06:00
Slava Pestov
44a2499c17
fixnum-shift-fast and fixnum-mod subprimitives
2008-11-03 01:18:35 -06:00
Slava Pestov
dd20b39cd6
fixnum-shift-fast subprimitive
2008-11-03 00:03:39 -06:00