Commit Graph

874 Commits (334e93bbbfbbbe143cc28cb712381ce929f74333)

Author SHA1 Message Date
Joe Groff 334e93bbbf get things to a point where they bootstrap again 2009-09-15 21:43:18 -05:00
Joe Groff 02b797f11b struct classes now make their own C type without help from alien.structs. remove alien.structs dependencies from everywhere outside of alien and compiler, and have the FFI handle both alien.structs and classes.struct c-types 2009-09-15 17:38:49 -05:00
Slava Pestov aeb6a01710 compiler.tree.propagation: fix unary-op type functions with complex number inputs 2009-09-15 14:30:20 -07:00
Slava Pestov 1b5614f974 math.functions: more accurate log10 (fixes problem reported by OneEyed) 2009-09-14 16:19:58 -05:00
Slava Pestov 8c46388272 compiler.cfg.builder: don't run certain tests if float intrinsics are not available 2009-09-13 23:12:47 -05:00
Slava Pestov 427bfb4ab8 math: add unordered comparison operators u< u<= u> u>= which behave exactly like < <= > >= except no floating point exceptions are set if one or both inputs are NaNs; also add efficient intrinsic for unordered? predicate, and fix propagation type functions for abs, absq, and bitnot 2009-09-12 22:20:13 -05:00
Slava Pestov 7aac0d69d6 ALIEN: now reads a hexadecimal integer instead of a decimal one, since in general hex is more useful for addresses 2009-09-12 21:17:53 -05:00
Slava Pestov 10423e0d56 compiler.tree.propagation: convert /i of a positive integer by a power of two into a shift 2009-09-11 21:03:11 -05:00
Slava Pestov 89d6096130 compiler.cfg.intrinsics: compile float-mod as a ##binary-float-function instead of a primitive call 2009-09-11 21:00:17 -05:00
Slava Pestov 527db8995a Specialized array overhaul
- Replace hand-written specialized-arrays.* subvocabularies with new system; instead of USE:ing specialized-arrays.T, do SPECIALIZED-ARRAY: T
- Ditto for specialized-vectors; use SPECIALIZED-VECTOR:
- io.mmap.functor: removed entirely, use <mapped-array> instead
- struct-arrays and struct-vectors have been removed because specialized arrays and vectors subsume them entirely
2009-09-09 22:33:34 -05:00
Slava Pestov 66f500bdd7 Fix the build 2009-09-09 13:44:54 -05:00
Slava Pestov 72eec2c53e compiler.cfg.save-contexts: add new pass 2009-09-08 21:56:28 -05:00
Slava Pestov 092b31910d compiler: separate ##save-context instruction from ##alien-invoke, generate a ##save-context for libm calls, and add a pass to combine multiple context saves within a basic block. Fixes crashes with FP traps thrown by libm functions on x86-32 2009-09-08 21:50:55 -05:00
Joe Groff 025a5b7b15 split unordered and ordered float comparison intrinsics in compiler; generate only unordered comparisons for now 2009-09-08 17:04:26 -05:00
Slava Pestov 88b4780096 Merge branch 'master' of git://factorcode.org/git/factor 2009-09-08 14:22:52 -05:00
Slava Pestov 8eeeeb5c5b inline alien-vector and set-alien-vector if SIMD is not available for a small speedup 2009-09-08 13:56:17 -05:00
Doug Coleman 551c06db2d Merge branch 'master' of git://factorcode.org/git/factor 2009-09-08 13:22:52 -05:00
Slava Pestov 17821626c3 Fix conflicts 2009-09-07 23:51:25 -05:00
Slava Pestov b279c5751c compiler.tree.propagation: type check inputs to unsafe foldable words manually, so that stuff like [ "Hi" { } fixnum+fast ] doesn't crash in the compiler 2009-09-07 23:40:23 -05:00
Slava Pestov 0b35d79aee compiler.tree.propagation.call-effect: stronger call( inlining; now can inline 'a [ b ] curry call(' where 'a' is literal, [ b ] doesn't infer, but [ a b ] does infer. This simplifies classes.struct:memory>struct 2009-09-07 17:45:03 -05:00
Slava Pestov e20e9008ea compiler.cfg.value-numbering: update tests for Joe's condition code changes 2009-09-04 03:11:56 -05:00
Slava Pestov 555543faae compiler: tweak generated code 2009-09-04 03:01:18 -05:00
Slava Pestov 1c87486320 math.vectors.simd: allow punning SIMD vectors between types 2009-09-04 02:35:58 -05:00
Slava Pestov 8223715a07 compiler.cfg.intrinsics: fix type detection on the alien type for vector accessors 2009-09-04 02:22:54 -05:00
Slava Pestov 1f5193198b compiler: clean up code generation for alien boxing/unboxing a bit 2009-09-03 21:22:43 -05:00
Slava Pestov 20dfbf7ac8 More SIMD work
- Rename SIMD types and register representations: <type>-<count> rather than <count><type>-array
- Make a functor to define 256-bit vector types, use it to define float-8 type
- Make SIMD instructions pure-insns so that they participate in value numbering
2009-09-03 20:58:56 -05:00
Joe Groff 0b9e5c034a add compiler comparison codes for floating-point unordered comparisons; update x86 backend to generate proper code for all floating-point comparisons 2009-09-03 20:32:05 -05:00
Slava Pestov 9cc705f6ba math.vectors.simd: split off intrinsics into a sub-vocabulary, to avoid loading most of the SIMD code on bootstrap 2009-09-03 03:43:43 -05:00
Slava Pestov 11aadb74af compiler.tree.propagation: type function for clone had an issue, sometimes clone would get optimized out because of incorrect constant folding 2009-09-03 02:40:18 -05:00
Slava Pestov 52b99c050e Initial implementation of SSE vector intrinsics:
- cpu.architecture: add SSE vector representations
- compiler.cfg.intrinsics.alien: remove an attempt at optimization that value numbering handles now
- compiler.cfg.representations: support instructions where the representation is set in the 'rep' slot, and support conversions between single and double floats
- alien-float, set-alien-float now use the single float representation, and the conversion is implicit; this fixes a long-standing bug where a register could get clobbered because of how %set-alien-float was defined on x86
- math.vectors.specialization: add support for SIMD specialization (where the vector word's body is replaced by another quotation), also specialize the 'sum' word
- math.vectors.simd: 4float-array, 2double-array, 4double-array types, and specializers for the math.vectors words
2009-09-03 02:33:07 -05:00
Slava Pestov 775b9af2f7 compiler: eliminate boilerplate by centralizing info in declarative INSN: syntax 2009-09-02 06:22:37 -05:00
Slava Pestov 14a063dd92 cpu.ppc: implement fast float function calls; 3x speedup on benchmark.struct-arrays on PowerPC 2009-09-01 15:19:26 -05:00
Slava Pestov 0cf3151216 compiler.cfg.intrinsics: cleanup: the "intrinsic" word property is now a quotation, not a boolean, making this mechanism more extensible 2009-08-30 22:20:49 -05:00
Slava Pestov 74d196d77c compiler/tests/codegen.factor: don't do exact float comparison 2009-08-30 18:57:45 -05:00
Slava Pestov 43af9b06a4 compiler.cfg.linear-scan.live-intervals: dead-value-error is never thrown anymore 2009-08-30 05:15:18 -05:00
Slava Pestov b35a01879e %box-displaced-alien: fix clobberage found by Doug 2009-08-30 05:11:08 -05:00
Slava Pestov f6a836d1e9 compiler.cfg.linear-scan now supports partial sync-points where all registers are spilled; taking advantage of this, there are new trigonometric intrinsics which yield a 2x performance boost on benchmark.struct-arrays and a 25% boost on benchmark.partial-sums 2009-08-30 04:52:01 -05:00
Slava Pestov fa64522421 compiler.cfg.value-numbering: fix ##box-displaced-alien simplification 2009-08-28 19:05:49 -05:00
Slava Pestov f30aa5d20e compiler: add fixnum-min/max intrinsics; ~10% speedup on benchmark.yuv-to-rgb 2009-08-28 19:02:59 -05:00
Slava Pestov 99bf9fadfb Performance improvements to make struct-arrays benchmark faster
- improved optimization of ##unbox-any-c-ptr on ##box-displaced-alien; convert it to ##unbox-c-ptr where possible using class info stored in the ##bda instruction
- make fcos, fsin, etc inline again; everything in math.libm inline again, except for fsqrt which is an intrinsic
- convert min and max on floats to float-min and float-max
- make min and max not inline, so that the above can work
- struct-arrays: rice a bit so that more fixnums come up
2009-08-28 05:21:16 -05:00
Slava Pestov 5f33f7306f compiler.tree.propagation.transforms: don't fail to compile if 'at' called on something that's not an assoc 2009-08-27 18:57:56 -05:00
Slava Pestov c9cba1cc00 compiler.cfg.instructions: forgot that ##box-displaced-alien needs a GC check; fixes segfault in benchmark.mandel 2009-08-27 04:09:35 -05:00
Slava Pestov 9caf3f9248 compiler: new inline intrinsic for <displaced-alien> where the inputs have known types; value numbering now eliminates unnecessary allocation of displaced aliens if the result is immediately unboxed again 2009-08-27 00:06:19 -05:00
Doug Coleman 546367b88a use structs 2009-08-26 11:01:39 -05:00
Doug Coleman be57edbff2 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-26 09:15:33 -05:00
Slava Pestov 40b522c9d0 compiler.cfg.linear-scan: fix unit tests for new fake-representations 2009-08-26 08:58:00 -05:00
Slava Pestov 02ec791ab7 compiler: only run float test in low-level-ir if float intrinsics enabled; fixes SIGILL on non-sse2 x86 machines 2009-08-26 06:58:47 -05:00
Slava Pestov d5fb53d417 compiler.cfg.debugger: fix fake-representations so that low-level-ir tests can pass on x86 2009-08-25 23:44:01 -05:00
Slava Pestov 4fe0257169 cpu.x86: use SQRTSD instruction for math.libm:fsqrt word 2009-08-25 23:22:15 -05:00
sheeple 2f789f735d basis/compiler/tests/low-level-ir: add ##copy double-float-rep test 2009-08-25 19:41:17 -05:00