Guillaume Emont [Wed, 19 Dec 2012 13:39:05 +0000 (14:39 +0100)]
mips: added cache prefetching hints
Guillaume Emont [Tue, 18 Dec 2012 19:47:37 +0000 (20:47 +0100)]
mips: introduced loop unrolling
For now, this only happens in the main loop, and is decided by the
ORC_UNROLL_SHIFT environment variable.
Guillaume Emont [Tue, 18 Dec 2012 19:21:09 +0000 (20:21 +0100)]
add forgotten headers to include in make dist
Guillaume Emont [Sat, 15 Dec 2012 18:15:43 +0000 (19:15 +0100)]
mips: implemented select0wb, select1wb, select0lw, select1lw, splatbw, splitlw, splitwb, shruw and swapw
Guillaume Emont [Sat, 15 Dec 2012 18:14:56 +0000 (19:14 +0100)]
mips: added emit functions for shrl.ph and precrq.qb.ph
Guillaume Emont [Sat, 15 Dec 2012 17:27:40 +0000 (18:27 +0100)]
mips: added convwb
Guillaume Emont [Sat, 15 Dec 2012 16:48:43 +0000 (17:48 +0100)]
mips: loadupib, loadupdb: error (not implemented) if source argument is not source var
Only source vars can get a ptr_offset, and we need one in these operations as
they are implemented now.
Guillaume Emont [Sat, 15 Dec 2012 16:47:46 +0000 (17:47 +0100)]
mips: shrs, shra.ph: error if shift amount is not a const
Guillaume Emont [Thu, 13 Dec 2012 17:04:11 +0000 (18:04 +0100)]
mips: mulswl: sign extend words before multiplying
Guillaume Emont [Thu, 13 Dec 2012 17:03:49 +0000 (18:03 +0100)]
mips: added emit function for seh
Guillaume Emont [Thu, 13 Dec 2012 16:57:08 +0000 (17:57 +0100)]
mips: convssslw: fix typo on minimum value to compare
Guillaume Emont [Thu, 13 Dec 2012 16:46:59 +0000 (17:46 +0100)]
mips: convsbw: spread bytes when we have an instruction shift
Guillaume Emont [Thu, 13 Dec 2012 16:28:30 +0000 (17:28 +0100)]
mips: fix endianness of result of loadupib and loadupdb
Guillaume Emont [Thu, 13 Dec 2012 14:41:06 +0000 (15:41 +0100)]
mips: added copyright headers
Guillaume Emont [Wed, 12 Dec 2012 16:11:05 +0000 (17:11 +0100)]
mips: fixes in mergebw and mergewl
Guillaume Emont [Wed, 12 Dec 2012 16:10:30 +0000 (17:10 +0100)]
mips: addw/addb: always use vectorial operation, whatever the shift
Guillaume Emont [Wed, 12 Dec 2012 16:09:47 +0000 (17:09 +0100)]
mips: load: use lbu instead of lb
Guillaume Emont [Wed, 12 Dec 2012 11:10:31 +0000 (12:10 +0100)]
mips: convubw: extract bytes into 2 halfwords when shift==1
Guillaume Emont [Wed, 12 Dec 2012 11:09:26 +0000 (12:09 +0100)]
mips: convsuswb and convssswb: put results in lower half
Guillaume Emont [Wed, 12 Dec 2012 11:08:24 +0000 (12:08 +0100)]
mips: _rule_load(): directly concatenate bytes for byte loads with shift 1
Guillaume Emont [Wed, 12 Dec 2012 11:07:16 +0000 (12:07 +0100)]
mips: added emit for precr.qb.ph
Guillaume Emont [Tue, 11 Dec 2012 15:34:47 +0000 (16:34 +0100)]
mips: fix shra.ph: correctly get shift value
Guillaume Emont [Tue, 11 Dec 2012 13:47:13 +0000 (14:47 +0100)]
mips: loadp: load as quad bytes or paired halfword for values of (resp) 1 or 2 bytes
Guillaume Emont [Tue, 11 Dec 2012 13:36:49 +0000 (14:36 +0100)]
mips: added emit functions for subu.ph and replv.ph
Guillaume Emont [Tue, 11 Dec 2012 13:36:19 +0000 (14:36 +0100)]
mips: mark t3->t5 as unavailable
Guillaume Emont [Tue, 11 Dec 2012 13:24:16 +0000 (14:24 +0100)]
mips: made convubw a no-op
Guillaume Emont [Tue, 11 Dec 2012 13:22:25 +0000 (14:22 +0100)]
mips: avoid orc_compiler_get_temp_reg()
Guillaume Emont [Mon, 10 Dec 2012 17:22:24 +0000 (18:22 +0100)]
mips: added rules for convsuswb, convubw, avgub, subw
Guillaume Emont [Mon, 10 Dec 2012 17:06:11 +0000 (18:06 +0100)]
mips: add missing nop in a branch delay slot
Guillaume Emont [Mon, 10 Dec 2012 15:39:08 +0000 (16:39 +0100)]
mips: added _emit() for lbu, subq.ph and preceu.ph.qbr
Guillaume Emont [Fri, 7 Dec 2012 13:05:44 +0000 (14:05 +0100)]
mips: implement swapl
Guillaume Emont [Fri, 7 Dec 2012 13:05:20 +0000 (14:05 +0100)]
mips: _emit() for wsbh
Guillaume Emont [Fri, 7 Dec 2012 12:45:01 +0000 (13:45 +0100)]
mips: implement loadupdb
Guillaume Emont [Wed, 5 Dec 2012 19:06:55 +0000 (20:06 +0100)]
mips: made sure more registers are available and use temporary registers more consistently
Guillaume Emont [Wed, 5 Dec 2012 18:23:34 +0000 (19:23 +0100)]
mips: implement loadupib
Guillaume Emont [Wed, 5 Dec 2012 18:22:32 +0000 (19:22 +0100)]
mips: initialise pointer offset registers when they exist
Guillaume Emont [Wed, 5 Dec 2012 18:21:17 +0000 (19:21 +0100)]
mips: handle various update types for vars
Guillaume Emont [Wed, 5 Dec 2012 18:17:49 +0000 (19:17 +0100)]
mips: emit functions for adduh_r.qb, rpelv.qb and packrl.ph
Guillaume Emont [Tue, 4 Dec 2012 18:32:39 +0000 (19:32 +0100)]
mips: implemented orc instructions subb, mullw, convssswb, mergebw, subssw, shrsw
Guillaume Emont [Tue, 4 Dec 2012 18:27:30 +0000 (19:27 +0100)]
mips: added emit for subu.qb, subq_s.ph, and, mul.ph, repl.ph, cmp.lt.ph, pick.ph
Guillaume Emont [Fri, 30 Nov 2012 18:23:17 +0000 (19:23 +0100)]
mips: implement convsbw
Guillaume Emont [Fri, 30 Nov 2012 18:23:05 +0000 (19:23 +0100)]
mips: emit functions for shll.ph and shra.ph
Guillaume Emont [Wed, 28 Nov 2012 19:15:26 +0000 (20:15 +0100)]
mips: implement flush_cache, fixing segfaults on actual hardware
Guillaume Emont [Wed, 28 Nov 2012 13:45:06 +0000 (14:45 +0100)]
mips: frame pointer when ORC_CODE=debug
Guillaume Emont [Thu, 22 Nov 2012 18:41:52 +0000 (19:41 +0100)]
mips: emit invariant instructions in _load_constants_inner()
Guillaume Emont [Thu, 22 Nov 2012 18:39:39 +0000 (19:39 +0100)]
mips: fixed convssslw, implementing it with slt/movn
Guillaume Emont [Thu, 22 Nov 2012 18:38:33 +0000 (19:38 +0100)]
mips: _emit_slt() and _emit_movn()
Guillaume Emont [Thu, 22 Nov 2012 18:38:02 +0000 (19:38 +0100)]
mips: change insn shift when x2/x4 is present
Guillaume Emont [Thu, 22 Nov 2012 18:37:03 +0000 (19:37 +0100)]
mips: $t3 is now our tmpreg
Guillaume Emont [Thu, 22 Nov 2012 18:28:41 +0000 (19:28 +0100)]
mips: implement loadp* orc instructions
Guillaume Emont [Thu, 22 Nov 2012 14:12:18 +0000 (15:12 +0100)]
mips: add _emit_lui()
Guillaume Emont [Tue, 20 Nov 2012 18:58:46 +0000 (19:58 +0100)]
mips: rules for mergewl and addssw
Guillaume Emont [Tue, 20 Nov 2012 18:57:33 +0000 (19:57 +0100)]
mips: add emit method for addq_s.ph
Guillaume Emont [Tue, 20 Nov 2012 17:55:48 +0000 (18:55 +0100)]
mips: rules for mulswl, shrsl and convssslw
Guillaume Emont [Tue, 20 Nov 2012 17:54:30 +0000 (18:54 +0100)]
mips: add emit methods for sra, mul, mtlo and extr_s.h
Guillaume Emont [Fri, 16 Nov 2012 17:33:37 +0000 (18:33 +0100)]
mips: fix stride handling in 2d
Guillaume Emont [Thu, 15 Nov 2012 15:32:56 +0000 (16:32 +0100)]
mips: handle case when n < (# of iterations to reach alignment)
Guillaume Emont [Thu, 15 Nov 2012 15:32:00 +0000 (16:32 +0100)]
mips: addedsupport for bltz,bgtz with immediate offset
Guillaume Emont [Thu, 15 Nov 2012 12:29:44 +0000 (13:29 +0100)]
mips: _assemble: ensure we load n after LABEL_OUTER_LOOP
Guillaume Emont [Mon, 12 Nov 2012 19:31:01 +0000 (20:31 +0100)]
mips: handle 2d loops
Guillaume Emont [Fri, 9 Nov 2012 18:27:32 +0000 (19:27 +0100)]
mips: generate loops for all (or most) alignment cases
Guillaume Emont [Fri, 9 Nov 2012 17:32:49 +0000 (18:32 +0100)]
mips: addede orc_mips_emit_conditional_branch_with_offset()
Guillaume Emont [Fri, 9 Nov 2012 17:32:15 +0000 (18:32 +0100)]
mips: added emit for beq, or, ori
Guillaume Emont [Fri, 9 Nov 2012 17:27:23 +0000 (18:27 +0100)]
mips: a1-a3 registers do not need to be saved
Guillaume Emont [Fri, 2 Nov 2012 17:51:11 +0000 (18:51 +0100)]
mips: introduced orc_mips_emit_full_loop() to avoid cut and pasted code
Guillaume Emont [Fri, 2 Nov 2012 11:24:06 +0000 (12:24 +0100)]
mips: added a special version of the region1 loop for the case where we can have all the variables aligned
Guillaume Emont [Thu, 1 Nov 2012 16:29:37 +0000 (17:29 +0100)]
mips: Fix detection of mipsel host
Guillaume Emont [Thu, 1 Nov 2012 15:57:04 +0000 (16:57 +0100)]
Add detection of mipsel host
Guillaume Emont [Tue, 30 Oct 2012 11:43:29 +0000 (12:43 +0100)]
mips: error when trying to use load with a constant
Guillaume Emont [Mon, 29 Oct 2012 15:54:33 +0000 (16:54 +0100)]
mips: added test for binary code generation
Guillaume Emont [Fri, 26 Oct 2012 15:19:15 +0000 (17:19 +0200)]
mips: add binary code generation
Also refactor a bit the branch emission code and handle labels properly.
Guillaume Emont [Fri, 26 Oct 2012 09:32:20 +0000 (11:32 +0200)]
mips: fix load and store for the unaligned cases
Still, something needs to be done (probably in _assemble()) to use the aligned
load/store operations when we can.
Guillaume Emont [Fri, 26 Oct 2012 09:31:24 +0000 (11:31 +0200)]
mips: fix counters for loop_shift==0
Guillaume Emont [Thu, 25 Oct 2012 14:43:30 +0000 (16:43 +0200)]
mips: fix label naming in generated assembly
Label names need to be function specific, else they clash when we have more
than one function in a file.
Guillaume Emont [Wed, 24 Oct 2012 17:24:26 +0000 (19:24 +0200)]
mips: fix mips_rule_addw() for the SIMD case
Guillaume Emont [Wed, 24 Oct 2012 17:14:28 +0000 (19:14 +0200)]
mips: reworked _assemble() to handle properly data sizes > 2
Guillaume Emont [Wed, 24 Oct 2012 17:03:47 +0000 (19:03 +0200)]
mips: factorised and mostly fixed load and store rules
Code is assuming that all data is correctly aligned for now.
Guillaume Emont [Wed, 24 Oct 2012 17:02:17 +0000 (19:02 +0200)]
mips: add emitters for more instructions
Guillaume Emont [Wed, 17 Oct 2012 10:23:40 +0000 (11:23 +0100)]
mips: added emit functions for beqz, addi, sub, srl, andi
Guillaume Emont [Wed, 17 Oct 2012 10:17:12 +0000 (11:17 +0100)]
mips: add forgotten argument to lw
Guillaume Emont [Tue, 16 Oct 2012 12:19:04 +0000 (13:19 +0100)]
mips: started work for a proper loop organisation to handle simd instructions
Guillaume Emont [Tue, 16 Oct 2012 12:17:41 +0000 (13:17 +0100)]
mips: added rules for loadb, storel, storeb and copyb
Guillaume Emont [Tue, 9 Oct 2012 15:47:43 +0000 (17:47 +0200)]
mips: added copyl
Guillaume Emont [Fri, 5 Oct 2012 16:22:19 +0000 (18:22 +0200)]
mips: do not trust ORC_STRUCT_OFFSET when we cross-compile into asm code
Guillaume Emont [Fri, 5 Oct 2012 14:03:32 +0000 (16:03 +0200)]
First version of mips target
Only generates asm code, and only support loadl, storel and addl for now.
David Schleef [Sat, 8 Dec 2012 20:08:37 +0000 (12:08 -0800)]
compile fix
David Schleef [Sat, 8 Dec 2012 19:53:56 +0000 (11:53 -0800)]
Fix multiple typedefs
Jonathan Rosser [Mon, 3 Dec 2012 21:08:27 +0000 (13:08 -0800)]
fix for more than one accumulator
Andreas Schwab [Sun, 2 Dec 2012 01:15:03 +0000 (17:15 -0800)]
Fix altivec implementation of cmpltf and cmplef operations
Andreas Schwab [Sun, 2 Dec 2012 01:12:53 +0000 (17:12 -0800)]
Adds support for PowerPC64
David Schleef [Tue, 28 Aug 2012 19:07:02 +0000 (12:07 -0700)]
compiler: remove redundant declaration
David Schleef [Sat, 18 Aug 2012 02:08:18 +0000 (19:08 -0700)]
Link to pthreads library
Cedric BAIL [Sat, 28 Apr 2012 18:15:39 +0000 (11:15 -0700)]
Add line numbers to errors
David Schleef [Sun, 1 Apr 2012 22:31:05 +0000 (15:31 -0700)]
test: allocate aligned memory on windows
David Schleef [Mon, 26 Mar 2012 17:23:14 +0000 (10:23 -0700)]
Split headers out of orcprogram.h
David Schleef [Thu, 1 Mar 2012 07:54:47 +0000 (23:54 -0800)]
bytecode: Add bytecode for instruction flags
David Schleef [Sat, 4 Feb 2012 21:33:31 +0000 (13:33 -0800)]
orcc: Add --no-backup
David Schleef [Sat, 28 Jan 2012 22:18:11 +0000 (14:18 -0800)]
bytecode: Add bytecode parsing
David Schleef [Sat, 15 Oct 2011 18:52:18 +0000 (11:52 -0700)]
test: fix unused variable warning
David Schleef [Sat, 15 Oct 2011 18:51:17 +0000 (11:51 -0700)]
x86insn: switch to ultra-conservative nops