Björn Lindqvist
3678f62508
x86.64: change the register order so that RBX is allocated before RCX
2015-06-16 18:28:32 -07:00
John Benediktsson
c44aaf58be
cpu.ppc: remove use of with-scope in favor of locals.
2015-06-15 09:11:03 -07:00
John Benediktsson
255b60ef8d
cpu.x86: remove use of with-scope in favor of locals.
2015-06-15 09:10:52 -07:00
Björn Lindqvist
f37ab939f0
compiler.*: more compiler docs
2015-06-14 16:44:37 +02:00
Doug Coleman
6e60c811ac
core: Rename create to create-word, create-in to create-word-in.
2015-06-08 12:47:35 -07:00
Björn Lindqvist
48e6455186
cpu.x86.*: %mov-vm-ptr isn't so useful, shorter and simpler to write
...
vm-reg MOV
2015-05-22 12:22:29 -07:00
Björn Lindqvist
6ca83e7588
Reorganising bootstrap files
...
All the bootstrap.factor scripts in cpu/ are run by the bootstrap to
make boot images, but aren't used otherwise. So I think it's cleaner to
put them in one directory inside the bootstrap hierarchy.
2015-05-22 12:22:24 -07:00
Doug Coleman
72d002ae4b
cpu.architecture: Fix trivial doc.
2015-05-18 00:37:05 -07:00
Björn Lindqvist
6c43475183
cpu.x86: fix silly bug in %clear
2015-05-18 06:52:49 +02:00
Björn Lindqvist
9ceea3c241
compiler.*: new cfg instruction ##clear, it makes it easier to see where
...
the compiler.cfg.stacks.clearing pass inserts extra instructions
2015-05-17 07:59:34 +02:00
Björn Lindqvist
655faadec9
compiler.*: now when we're tracking uninitialized locations instead of
...
initialized ones, the height slot isn't needed on ##call anymore
2015-05-17 07:59:34 +02:00
John Benediktsson
2c3492a916
minor cleanup to some docs.
2015-05-13 16:09:14 -07:00
John Benediktsson
e1d18579e7
cpu/stack-checker: fix some help-lint warnings.
2015-05-10 10:13:57 -07:00
Björn Lindqvist
0c2559ef6e
compiler.*: a bunch more compiler docs
2015-05-09 20:04:22 -07:00
Björn Lindqvist
8df92abeb9
compiler.*,cpu.*: add a height slot to ##call nodes, then other compiler
...
passes can much easier to accurate liveness analysis on stack locations
2015-05-09 20:04:22 -07:00
Björn Lindqvist
b827bc75cc
compiler.*: bunch of new docs for some compiler instructions
2015-04-29 09:31:58 -07:00
Björn Lindqvist
92165e4ee7
Docs: bunch of smaller documentation fixes for various vocabs
2015-04-29 09:31:54 -07:00
Björn Lindqvist
ded3760d46
compiler.*: merge of ##inc-r and ##inc-d into one instruction ##inc with a loc slot
...
this is nice because it leads to simpler code and matches how ##peek and ##replace instructions work
2015-04-29 09:31:53 -07:00
Björn Lindqvist
53b7f82368
Docs: more compiler docs
2014-12-11 14:30:46 +01:00
Björn Lindqvist
ba6accb983
cpu.x86.tests: more tests
2014-12-08 18:13:46 -08:00
Björn Lindqvist
52d3affeb8
compiler.cfg.*: the ##alien-assembly instruction does not use a gc-map
2014-12-08 18:13:46 -08:00
John Benediktsson
a5e7176ec7
cpu.x86: "dup pop* push" is just "set-last".
2014-11-30 08:28:19 -08:00
Björn Lindqvist
8ea234e4de
cpu.architecture.tests: fix tests for win 64
2014-11-24 04:20:07 +01:00
John Benediktsson
44f31ee13e
use swapd instead of [ swap ] dip.
2014-11-21 11:56:17 -08:00
Björn Lindqvist
7ebd63a217
cpu.architecture: docs and some tests
2014-11-16 06:25:54 -08:00
Björn Lindqvist
f06f59b956
Docs: smallish improvements to compiler vocabs
2014-11-16 06:25:54 -08:00
Doug Coleman
9ff6d2d49c
cpu.x86.64: 64-bit register is RDX not EDX. Fixes #1191 .
2014-11-07 22:03:12 -08:00
Benjamin Pollack
2c3dd8c3c8
Remove executable bit from tons of files that aren't
2014-11-05 20:40:42 -08:00
John Benediktsson
465aa8786f
cpu.x86.assembler.operands: fix help-lint.
2014-10-20 09:24:20 -07:00
Björn Lindqvist
a617855aef
Docs: fixing smaller help-lint nitpicks
2014-10-19 14:05:06 +02:00
Björn Lindqvist
5152c49eb3
cpu.*: docs and tests for words in the assembler
2014-10-19 13:40:41 +02:00
Björn Lindqvist
83cf4b9d57
compiler,cpu: more docs
2014-10-17 23:18:57 +02:00
Björn Lindqvist
40df5df231
cpu.architecture: %save-context example
2014-10-17 23:17:49 +02:00
Björn Lindqvist
1225abeeaf
Docs: more compiler-related documentation
2014-08-13 11:01:10 -07:00
John Benediktsson
b915520311
cpu.architecture: fix using from bad conflict merge.
2014-06-08 11:48:31 -07:00
Björn Lindqvist
280620c55f
Docs: docs for compiler-related words
2014-06-08 11:48:31 -07:00
Björn Lindqvist
93a609db38
Docs: for cpu.architecture words
2014-06-08 11:48:30 -07:00
Björn Lindqvist
cf8de7cc1a
Docs: for cpu.x86
2014-06-08 11:48:30 -07:00
Björn Lindqvist
fa097c7a56
Docs: for compiler.cfg and cpu.architecture words
...
Conflicts:
basis/cpu/architecture/architecture-docs.factor
2014-06-08 11:48:30 -07:00
John Benediktsson
57f9d78892
improve help by linking to types directly.
2014-05-23 20:20:15 -07:00
Björn Lindqvist
e2eebdec4d
Docs: mostly fixes for doc errors found by help lint
2014-05-10 17:13:49 -07:00
Björn Lindqvist
5bccede3b6
Docs: docs for compiler.* and cpu.* words
2014-05-10 17:13:49 -07:00
Björn Lindqvist
4f9f2b862f
Docs: docs for compiler-related vocabs
2014-05-10 17:13:49 -07:00
Björn Lindqvist
6626cd24a1
Docs: docs for cpu.* vocabs
2014-05-10 17:13:48 -07:00
Björn Lindqvist
d074f1a9c9
Docs: for cpu.x86.* words
2014-05-10 17:13:48 -07:00
Björn Lindqvist
e2fe5ccfe8
Docs: stub docs for cpu.architecture
2014-05-10 17:13:48 -07:00
Doug Coleman
262eb73ea6
basis: Re-enable some things I commented out. Fixes #22 . Thanks @ajvondrak!
2012-12-31 11:48:30 -08:00
Doug Coleman
a0dd953e33
starting point - Fix bootstrap; I broke it in merging. Disable environment variables because the compiler isn't loaded yet and can't call C ffi functions, and tools.test loads this vocab.
...
Disable intrinsics in cpu.x86.64 for now, since they invoke the compiler
Fix ##branch renaming to ##branch,
To work on this branch:
./factor -include=math -i=boot.image
./factor -run=listener
USE: compiler USE: tools.test save
enable-optimizer
Error message is now:
T{ vregs-shouldn't-interfere f 409 424 }
2012-12-31 11:03:45 -08:00
Doug Coleman
3582a6c624
kernel: Add 4dup, 4drop, and 4cleave.
2012-10-22 09:47:34 -07:00
John Benediktsson
3f947055b4
Revert "cpu.x86.bootstrap: Rice the jit compiler -- SHR SHL -> AND."
...
This reverts commit f43e2b1ba7
.
2012-09-21 10:43:48 -07:00
Doug Coleman
4ee63bea7e
cpu.x86.bootstrap: Rice the jit compiler -- SHR SHL -> AND.
2012-09-21 10:18:14 -07:00
Doug Coleman
ba307bb38d
cpu.x86.features: Rename rdrnd to rdrand!
2012-09-20 12:03:10 -07:00
Doug Coleman
ed83c87554
cpu.x86: Add ghetto RDRAND support. Proper support wouldn't use alien-assembly and would take a count parameter.
2012-09-20 11:54:44 -07:00
Doug Coleman
d196f8f141
cpu.x86: Use bit-range, don't call cpuid so many times
2012-09-19 15:44:20 -07:00
Doug Coleman
e97c8971a5
cpu.x86: Some calls to CPUID take a parameter in ECX. Add cpuid-extended to allow these.
2012-09-19 11:30:54 -07:00
John Benediktsson
e45f0ec9e2
cpu.x86.features: temporary fix for bootstrap issue.
2012-09-19 10:41:54 -07:00
Doug Coleman
de52d96d93
cpu.x86.features: Add some words to check cpu features. Replace alien-assembly popcnt? instruction with general cpuid one.
2012-09-19 10:12:25 -07:00
Doug Coleman
1897f5fb4a
cpu.x86.assember: Add RDMSR for completeness, but it can't be called from user code. Factor kernel modules?
2012-09-19 10:11:36 -07:00
Doug Coleman
d52c0b1987
cpu.x86.features: Unbiased CPUID test.
2012-09-19 08:48:14 -07:00
Doug Coleman
9c0a8b3250
cpu.x86: Fix load order.
2012-09-19 08:40:18 -07:00
Doug Coleman
9827e29e95
cpu.x86.features: Fix cpuid for win64.
2012-09-18 20:09:39 -07:00
Doug Coleman
0d337e04ea
cpu.x86.features: Implement cpuid with help from joe. Add unit test.
2012-09-18 18:51:32 -07:00
Doug Coleman
9ebd6c11ad
cpu.x86: Fix the popcnt? word alien-assembly. XOR the return-reg RAX before calling BT/BSET because XOR clears the CF and the whole thing becomes a no-op. Change popcnt instruction to opt-out rather than opt-in. Fixes #663 .
2012-09-18 17:15:03 -07:00
John Benediktsson
2f325e4fee
using if-zero in even more places.
2012-07-16 19:38:49 -07:00
John Benediktsson
d1f3b326e5
math: using if-zero in more places.
2012-06-18 14:32:39 -07:00
Joe Groff
9b56fbb1c1
cpu.x86.32.bootstrap: oops, meant bootstrap-cell
2011-12-19 20:55:07 -08:00
Joe Groff
bc3f34cbd7
cpu.x86.32.bootstrap: update unwind-native-frames
...
The arguments passed from C are in a different position now.
2011-12-19 18:42:14 -08:00
Joe Groff
b321c5656e
cpu.x86.64: define jit-load-vm as a no-op
...
This was the signal handler prolog code can be shared completely between x86.32 and x86.64.
2011-12-14 11:33:05 -08:00
Joe Groff
d62a0b28e6
oops, handler still need to jit-load-vm on x86-32
2011-12-14 09:56:50 -08:00
Joe Groff
7c9332e966
cpu.x86.*: clean up signal handler prolog code
...
Also bump the signal handler frame sizes up again since it looks like we shrank them too much.
2011-12-14 09:56:50 -08:00
Joe Groff
2eba1b5449
cpu.x86: reduce compiled frames by 2 cells too
2011-12-14 09:56:49 -08:00
Joe Groff
079025559d
simplify function prologs
2011-12-14 09:56:49 -08:00
Joe Groff
ee656387ea
cpu.*.bootstrap: return address for (set-context)
...
Instead of pushing zero as the fake return address for a set-context call, push an address that points back into the primitive so that callstack walking can match the frame back to the subprimitive.
2011-12-14 09:56:46 -08:00
Joe Groff
1911905c6b
vm: frame size for signal handler code blocks
2011-12-14 09:56:46 -08:00
Joe Groff
e21f316583
vm: store stack frame size in code blocks
...
Change modify-code-heap primitive so it takes a sixth element in each array for the frame size.
2011-12-14 09:56:45 -08:00
Joe Groff
d927a070ed
cpu.x86: enable POPCNT with a flag
...
If bootstrapped with '-enable-popcnt' and the host CPU supports it, enable the POPCNT-based fixnum-bit-count intrinsic. Fixes #436 .
2011-12-12 16:43:49 -08:00
Joe Groff
943596575a
use radix literals
2011-11-23 19:03:40 -08:00
Joe Groff
6498bc65ce
compiler: emit safepoints in optimized prologs
2011-11-23 11:11:25 -08:00
Joe Groff
248066c710
code beautification
2011-11-13 16:10:26 -08:00
Joe Groff
d79b462f75
compiler: add intrinsic for PMOVMSKB/MOVMSKP[SD]
...
Combined with a fast bit-count this will let us rice byte-counting.
2011-11-13 16:10:20 -08:00
Joe Groff
e0dc236725
cpu.*.bootstrap: clear faulting flag directly
...
No reason to go through a safepoint in unwind-native-frames really.
2011-11-12 13:02:57 -08:00
Joe Groff
e24400679f
vm: more defense against multi-faulting
...
* Clear faulting_p from a safepoint rather than inside general_error, because jumping into unwind-native-frames could blow up.
* Handle multiple faults from fatal_error by breakpointing. Is there anything else we can safely do at that point?
* Verify memory protection faults in the top half of the signal handlers because signal dispatch could fault. Treat memory faults during gc or fep as fatal errors.
* Add a function factor_vm::abort() that restores the default SIGABRT handler and ::abort()s. Use it from fatal_error() so we get useful context from gdb and so the user gets feedback from the system crash reporter that Factor blew up and didn't just disappear.
* In factorbug(), don't proceed with .s .r .c if it would be unsafe to do so.
* Don't pile on signals if we've already called fatal_error().
2011-11-12 13:02:57 -08:00
Joe Groff
c31530caec
vm: strip out call-counting profiler
...
This makes the separate "code" and "entry_point" fields in word and quotation redundant, so also remove them to reclaim an additional cell per word and quotation object, which should help with #318 .
2011-11-10 16:01:07 -08:00
Joe Groff
c736b04ada
cpu.x86.*.bootstrap: save flags in signal-handlers
2011-11-04 11:56:01 -07:00
Joe Groff
a934b7f3e5
cpu.x86.bootstrap: cell -> bootstrap-cell
2011-11-04 11:54:40 -07:00
Joe Groff
4ef2a9b4f0
cpu.x86.assembler: PUSHF, POPF instructions
2011-11-04 11:23:11 -07:00
Joe Groff
d9293337bb
cpu.x86.64.bootstrap: save all the regs on signal
...
Appears to fix another sporadic crash from mason on x86-64. There's no reason to cut corners here, really.
2011-11-04 10:01:56 -07:00
Joe Groff
1bc623167f
cpu.x86.bootstrap: don't safepoint in a safepoint
...
Safepointing in the signal-handler primitive causes a crash if the safepoint is guarded and the signal being handled was raised by a safepoint. Put our own RET in the subprimitive to bail out before the standard epilog gets written out. This tentatively appears to fix #349 .
2011-11-03 20:19:38 -07:00
Joe Groff
e201f3562f
cpu.x86.32.bootstrap: typo
2011-11-03 13:07:13 -07:00
Joe Groff
6bb46a3f1e
vm: always generate safepoints in jit
...
Even if there's no stack frame we still need to safepoint before leaving the function. Fixes #332 .
2011-11-03 11:57:43 -07:00
Joe Groff
8cf18d1a82
remove BSD,solaris,etc. misc platform support code
2011-11-02 17:13:51 -07:00
Joe Groff
252915a37c
fix platform dependency in leaf-signal-handler
2011-11-02 13:23:12 -07:00
Joe Groff
9f6f36fdec
cpu.x86.bootstrap: simplify leaf-signal-handler
...
We can use RET (stack-frame-size - cell) instead of doing stack gymnastics.
2011-11-02 13:23:08 -07:00
Doug Coleman
94db86a6db
Make "foo.private" require load foo instead.
...
Move require from vocabs.loader to vocabs. Update everything.
Fixes #201 .
2011-11-02 11:50:03 -07:00
Joe Groff
2d5360778f
cleanups from code review
2011-10-27 21:18:23 -07:00
Joe Groff
c70a1004f8
cpu.x86.64: also must save ctx-reg
2011-10-27 21:18:21 -07:00
Joe Groff
ff2d480d98
cpu.x86.32: update for resumable signal handlers
2011-10-27 21:18:19 -07:00
Joe Groff
d6eae2f42d
vm: suppress signal-handler stack frame generation
...
This is a hack; see #295
2011-10-27 21:18:19 -07:00
Joe Groff
402e1155a5
vm: resumably handle signals from leaf procedures
2011-10-27 21:18:18 -07:00
Joe Groff
1386212d23
vm: dispatch signal handlers through subprimitive
...
We also need to save C ABI volatile registers before calling the signal handler in order to be able to reliably resume. Add signal-handler and leaf-signal-handler subprimitives to preserve volatile registers before invoking the signal handler C function.
2011-10-27 21:18:18 -07:00