diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-11-11 17:39:01 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-11-11 17:39:01 +0000 |
commit | b2d56462534de5ef754511e54b3e638f20355cae (patch) | |
tree | 6730d4fddb207f2a87de87e8af1b2efe0acbf9d4 | |
parent | f9d5598a812949b30e5e08e94e091556796c8842 (diff) | |
download | fpc-b2d56462534de5ef754511e54b3e638f20355cae.tar.gz |
* Attempt to roll back last Hermes merges. TBT on 64-bit.
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_2_6@26060 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | packages/hermes/Makefile | 136 | ||||
-rw-r--r-- | packages/hermes/Makefile.fpc | 10 | ||||
-rw-r--r-- | packages/hermes/src/factconv.inc | 12 | ||||
-rw-r--r-- | packages/hermes/src/hermes.pp | 7 | ||||
-rw-r--r-- | packages/hermes/src/hermes_factory.inc | 10 | ||||
-rw-r--r-- | packages/hermes/src/x86_64/headx86_64.inc | 1 | ||||
-rw-r--r-- | packages/hermes/src/x86_64/x86_64_i8.inc | 137 |
7 files changed, 69 insertions, 244 deletions
diff --git a/packages/hermes/Makefile b/packages/hermes/Makefile index 2e5ed23a54..b070c071c5 100644 --- a/packages/hermes/Makefile +++ b/packages/hermes/Makefile @@ -502,206 +502,200 @@ endif ifeq ($(FULL_TARGET),i386-haiku) override COMPILER_OPTIONS+=-dI386_ASSEMBLER endif -ifeq ($(FULL_TARGET),x86_64-linux) -override COMPILER_OPTIONS+=-dx86_64_ASSEMBLER -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -override COMPILER_OPTIONS+=-dx86_64_ASSEMBLER -endif ifeq ($(FULL_TARGET),i386-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-go32v2) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-win32) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-os2) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-freebsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-beos) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-haiku) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-netbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-solaris) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-qnx) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-netware) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-openbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-wdosx) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-emx) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-watcom) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-netwlibc) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-wince) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-symbian) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-nativent) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-iphonesim) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-freebsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-netbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-amiga) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-atari) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-openbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-palmos) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),m68k-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-amiga) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-macos) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-darwin) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-morphos) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-wii) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),sparc-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),sparc-netbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),sparc-solaris) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),sparc-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-netbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-solaris) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-openbsd) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-darwin) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-win64) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-darwin) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-wince) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-gba) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-nds) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),arm-symbian) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc64-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),avr-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),armeb-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),armeb-embedded) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),mipsel-linux) -override COMPILER_INCLUDEDIR+=src $(ARCHINC) +override COMPILER_INCLUDEDIR+=src endif ifeq ($(FULL_TARGET),i386-linux) override COMPILER_SOURCEDIR+=src tests diff --git a/packages/hermes/Makefile.fpc b/packages/hermes/Makefile.fpc index 92dbe9b6ab..a34c89cc40 100644 --- a/packages/hermes/Makefile.fpc +++ b/packages/hermes/Makefile.fpc @@ -16,21 +16,13 @@ options_i386_go32v2=-dI386_ASSEMBLER options_i386_freebsd=-dI386_ASSEMBLER options_i386_haiku=-dI386_ASSEMBLER options_i386_beos=-dI386_ASSEMBLER -options_x86_64_linux=-dx86_64_ASSEMBLER -options_x86_64_win32=-dx86_64_ASSEMBLER -options_x86_64_go32v2=-dx86_64_ASSEMBLER -options_x86_64_freebsd=-dx86_64_ASSEMBLER -options_x86_64_haiku=-dx86_64_ASSEMBLER -options_x86_64_beos=-dx86_64_ASSEMBLER unitdir= targetdir=. -includedir=src $(ARCHINC) +includedir=src sourcedir=src tests [install] -ARCHINC=src/$(ARCH) - fpcpackage=y [default] diff --git a/packages/hermes/src/factconv.inc b/packages/hermes/src/factconv.inc index 74d7cbf741..84af202387 100644 --- a/packages/hermes/src/factconv.inc +++ b/packages/hermes/src/factconv.inc @@ -58,20 +58,10 @@ end; const Factory_NumConverters = 45 - {$IFDEF I386_ASSEMBLER}+27{$ENDIF I386_ASSEMBLER} - {$IFDEF X86_64_ASSEMBLER}+1{$ENDIF X86_64_ASSEMBLER} - ; + {$IFDEF I386_ASSEMBLER}+27{$ENDIF I386_ASSEMBLER}; Factory_Converters: array [0..Factory_NumConverters - 1] of THermesFactoryStruct = ( -{$IFDEF X86_64_ASSEMBLER} - { ------ From 8 bit INDEXED ------- } - (s_bits:8;s_idx:True;s_r:0;s_g:0;s_b:0;s_a:0; - d_bits:32;d_idx:False;d_r:0;d_g:0;d_b:0;d_a:0; - loopnormal:@ConvertX86_64_index8_32;loopstretch:nil; - normal:@NotApplicable;stretch:nil; - dither:nil;ditherstretch:nil;processor:PROC_X86_64), -{$ENDIF X86_64_ASSEMBLER} {$IFDEF I386_ASSEMBLER} { ------ From 32 RGB 888 - MMX PENTIUM II ---- } (s_bits:32;s_idx:False;s_r:$ff0000;s_g:$ff00;s_b:$ff;s_a:0; diff --git a/packages/hermes/src/hermes.pp b/packages/hermes/src/hermes.pp index 70eb1ab657..e31745b087 100644 --- a/packages/hermes/src/hermes.pp +++ b/packages/hermes/src/hermes.pp @@ -50,10 +50,6 @@ unit Hermes; {$ENDIF} {$ENDIF} -{$IF defined(cpux86_64) and not defined(noassembler)} - {$DEFINE X86_64_ASSEMBLER} -{$ENDIF} - interface const @@ -468,9 +464,6 @@ var {$I i386/headi386.inc} {$I i386/headmmx.inc} {$ENDIF I386_ASSEMBLER} -{$IFDEF X86_64_ASSEMBLER} - {$I x86_64/headx86_64.inc} -{$ENDIF X86_64_ASSEMBLER} {$I factconv.inc} {$I hermes_list.inc} {$I hermes_utility.inc} diff --git a/packages/hermes/src/hermes_factory.inc b/packages/hermes/src/hermes_factory.inc index 09afe3777e..0eed2005bb 100644 --- a/packages/hermes/src/hermes_factory.inc +++ b/packages/hermes/src/hermes_factory.inc @@ -34,11 +34,10 @@ var Processor: Integer; procedure Hermes_Factory_Init; -{$IFDEF I386_ASSEMBLER} var - res: Integer = 0; -{$ENDIF I386_ASSEMBLER} + res: Integer; begin + res := 0; Processor := PROC_GENERIC; {$IFDEF I386_ASSEMBLER} @@ -51,9 +50,6 @@ begin { Writeln('mmx!');} end; {$ENDIF I386_ASSEMBLER} - {$IFDEF X86_64_ASSEMBLER} - Processor := Processor or PROC_X86_64; - {$ENDIF X86_64_ASSEMBLER} end; function Hermes_Factory_getClearer(bits: Uint32): PHermesClearer; @@ -263,9 +259,7 @@ end; function Hermes_Factory_getEqualConverter(bits: Integer): PHermesConverter; var found: Boolean; -{$IFDEF I386_ASSEMBLER} asm_found: Integer; -{$ENDIF I386_ASSEMBLER} c_found: Integer; begin found := False; diff --git a/packages/hermes/src/x86_64/headx86_64.inc b/packages/hermes/src/x86_64/headx86_64.inc index fee250ed7c..e69de29bb2 100644 --- a/packages/hermes/src/x86_64/headx86_64.inc +++ b/packages/hermes/src/x86_64/headx86_64.inc @@ -1 +0,0 @@ -{$I x86_64_i8.inc} diff --git a/packages/hermes/src/x86_64/x86_64_i8.inc b/packages/hermes/src/x86_64/x86_64_i8.inc index 249f45d98c..e69de29bb2 100644 --- a/packages/hermes/src/x86_64/x86_64_i8.inc +++ b/packages/hermes/src/x86_64/x86_64_i8.inc @@ -1,137 +0,0 @@ -{ - Free Pascal version of the Hermes pixel conversion library. - Copyright (C) 2012, 2013 Nikolay Nikolov (nickysn@users.sourceforge.net) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version - with the following modification: - - As a special exception, the copyright holders of this library give you - permission to link this library with independent modules to produce an - executable, regardless of the license terms of these independent modules,and - to copy and distribute the resulting executable under terms of your choice, - provided that you also meet, for each linked independent module, the terms - and conditions of the license of that module. An independent module is a - module which is not derived from or based on this library. If you modify - this library, you may extend this exception to your version of the library, - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -} - -{$ASMMODE intel} - -{ ------------------------------------------------------------------------- - - NORMAL CONVERTERS - - ------------------------------------------------------------------------- } - -procedure ConvertX86_64_index8_32(iface: PHermesConverterInterface); cdecl; -label - preloop_start, preloop_skip, loop_start, loop_pre_remainder, loop_remainder, done; -var - i: Integer; - s_pixel: Uint8; - d_pixel: Uint32; - source, dest: PUint8; - lookup: PUint32; - s_width: int64; -begin - source := iface^.s_pixels; - dest := iface^.d_pixels; - lookup := iface^.lookup; - s_width := iface^.s_width; - if s_width <= 0 then - exit; - repeat -{ for i := 0 to iface^.s_width - 1 do - begin} -{ s_pixel := source^; - d_pixel := iface^.lookup[s_pixel]; - PUint32(dest)^ := d_pixel or $FF; - Inc(source); - Inc(dest, 4);} - asm - mov rsi, [source] - mov rdi, [dest] - mov rbx, [lookup] - mov rcx, [s_width] - -preloop_start: - test rdi, 15 - jz preloop_skip - - movzx rax, byte [rsi] - mov edx, dword [rbx + rax * 4] - movnti [rdi], edx - inc rsi - add rdi, 4 - sub rcx, 1 - jz done - jmp preloop_start - -preloop_skip: - mov r8, rcx - and r8, 3 - shr rcx, 2 - test rcx, rcx - jz loop_pre_remainder - - align 16 -loop_start: - movzx rax, byte [rsi] - movzx r9, byte [rsi + 1] - movzx r10, byte [rsi + 2] - movzx r11, byte [rsi + 3] - - movd xmm0, dword [rbx + rax * 4] - movd xmm1, dword [rbx + r9 * 4] - movd xmm2, dword [rbx + r10 * 4] - movd xmm3, dword [rbx + r11 * 4] - punpckldq xmm0, xmm1 - punpckldq xmm2, xmm3 - punpcklqdq xmm0, xmm2 - - movntdq [rdi], xmm0 - add rsi, 4 - add rdi, 16 - sub ecx, 1 - jnz loop_start - -loop_pre_remainder: - mov rcx, r8 - test rcx, rcx - jz done -loop_remainder: - movzx rax, byte [rsi] - mov edx, dword [rbx + rax * 4] - movnti [rdi], edx - inc rsi - add rdi, 4 - sub ecx, 1 - jnz loop_remainder - -done: - mov [source], rsi - mov [dest], rdi - end; -{ end;} - Inc(source, iface^.s_add); - Inc(dest, iface^.d_add); - Dec(iface^.s_height); - until iface^.s_height = 0; - asm - sfence - end; -end; |