mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-10 23:09:28 +02:00
* win64: factored out cpu specific code
git-svn-id: trunk@49561 -
This commit is contained in:
parent
820e0dddcd
commit
4236bee6f1
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -12418,6 +12418,7 @@ rtl/win32/windows.pp svneol=native#text/plain
|
|||||||
rtl/win32/winsysut.pp svneol=native#text/plain
|
rtl/win32/winsysut.pp svneol=native#text/plain
|
||||||
rtl/win64/Makefile svneol=native#text/plain
|
rtl/win64/Makefile svneol=native#text/plain
|
||||||
rtl/win64/Makefile.fpc svneol=native#text/plain
|
rtl/win64/Makefile.fpc svneol=native#text/plain
|
||||||
|
rtl/win64/aarch64/cpuwin.inc svneol=native#text/plain
|
||||||
rtl/win64/buildrtl.lpi svneol=native#text/plain
|
rtl/win64/buildrtl.lpi svneol=native#text/plain
|
||||||
rtl/win64/buildrtl.pp svneol=native#text/plain
|
rtl/win64/buildrtl.pp svneol=native#text/plain
|
||||||
rtl/win64/classes.pp svneol=native#text/plain
|
rtl/win64/classes.pp svneol=native#text/plain
|
||||||
@ -12427,6 +12428,7 @@ rtl/win64/signals.pp svneol=native#text/plain
|
|||||||
rtl/win64/sysinit.pp svneol=native#text/plain
|
rtl/win64/sysinit.pp svneol=native#text/plain
|
||||||
rtl/win64/system.pp svneol=native#text/plain
|
rtl/win64/system.pp svneol=native#text/plain
|
||||||
rtl/win64/windows.pp svneol=native#text/plain
|
rtl/win64/windows.pp svneol=native#text/plain
|
||||||
|
rtl/win64/x86_64/cpuwin.inc svneol=native#text/plain
|
||||||
rtl/wince/Makefile svneol=native#text/plain
|
rtl/wince/Makefile svneol=native#text/plain
|
||||||
rtl/wince/Makefile.fpc svneol=native#text/plain
|
rtl/wince/Makefile.fpc svneol=native#text/plain
|
||||||
rtl/wince/classes.pp svneol=native#text/plain
|
rtl/wince/classes.pp svneol=native#text/plain
|
||||||
|
@ -1641,322 +1641,322 @@ endif
|
|||||||
override INSTALL_BUILDUNIT=buildrtl
|
override INSTALL_BUILDUNIT=buildrtl
|
||||||
override INSTALL_FPCPACKAGE=y
|
override INSTALL_FPCPACKAGE=y
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
ifeq ($(FULL_TARGET),i386-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
ifeq ($(FULL_TARGET),i386-go32v2)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-win32)
|
ifeq ($(FULL_TARGET),i386-win32)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-os2)
|
ifeq ($(FULL_TARGET),i386-os2)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
ifeq ($(FULL_TARGET),i386-freebsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-beos)
|
ifeq ($(FULL_TARGET),i386-beos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-haiku)
|
ifeq ($(FULL_TARGET),i386-haiku)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
ifeq ($(FULL_TARGET),i386-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-solaris)
|
ifeq ($(FULL_TARGET),i386-solaris)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netware)
|
ifeq ($(FULL_TARGET),i386-netware)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
ifeq ($(FULL_TARGET),i386-openbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
ifeq ($(FULL_TARGET),i386-wdosx)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-darwin)
|
ifeq ($(FULL_TARGET),i386-darwin)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-emx)
|
ifeq ($(FULL_TARGET),i386-emx)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-watcom)
|
ifeq ($(FULL_TARGET),i386-watcom)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
ifeq ($(FULL_TARGET),i386-netwlibc)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-wince)
|
ifeq ($(FULL_TARGET),i386-wince)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-embedded)
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-symbian)
|
ifeq ($(FULL_TARGET),i386-symbian)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-nativent)
|
ifeq ($(FULL_TARGET),i386-nativent)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-iphonesim)
|
ifeq ($(FULL_TARGET),i386-iphonesim)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-android)
|
ifeq ($(FULL_TARGET),i386-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-aros)
|
ifeq ($(FULL_TARGET),i386-aros)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
ifeq ($(FULL_TARGET),m68k-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
ifeq ($(FULL_TARGET),m68k-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
ifeq ($(FULL_TARGET),m68k-amiga)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-atari)
|
ifeq ($(FULL_TARGET),m68k-atari)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-macosclassic)
|
ifeq ($(FULL_TARGET),m68k-macosclassic)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-sinclairql)
|
ifeq ($(FULL_TARGET),m68k-sinclairql)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
ifeq ($(FULL_TARGET),powerpc-amiga)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-macosclassic)
|
ifeq ($(FULL_TARGET),powerpc-macosclassic)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
ifeq ($(FULL_TARGET),powerpc-darwin)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-wii)
|
ifeq ($(FULL_TARGET),powerpc-wii)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-aix)
|
ifeq ($(FULL_TARGET),powerpc-aix)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
ifeq ($(FULL_TARGET),sparc-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
ifeq ($(FULL_TARGET),sparc-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-haiku)
|
ifeq ($(FULL_TARGET),x86_64-haiku)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-netbsd)
|
ifeq ($(FULL_TARGET),x86_64-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-solaris)
|
ifeq ($(FULL_TARGET),x86_64-solaris)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-openbsd)
|
ifeq ($(FULL_TARGET),x86_64-openbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
ifeq ($(FULL_TARGET),x86_64-darwin)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-iphonesim)
|
ifeq ($(FULL_TARGET),x86_64-iphonesim)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-android)
|
ifeq ($(FULL_TARGET),x86_64-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-aros)
|
ifeq ($(FULL_TARGET),x86_64-aros)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-dragonfly)
|
ifeq ($(FULL_TARGET),x86_64-dragonfly)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
ifeq ($(FULL_TARGET),arm-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-netbsd)
|
ifeq ($(FULL_TARGET),arm-netbsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-palmos)
|
ifeq ($(FULL_TARGET),arm-palmos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-wince)
|
ifeq ($(FULL_TARGET),arm-wince)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-gba)
|
ifeq ($(FULL_TARGET),arm-gba)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-nds)
|
ifeq ($(FULL_TARGET),arm-nds)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-embedded)
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-symbian)
|
ifeq ($(FULL_TARGET),arm-symbian)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-android)
|
ifeq ($(FULL_TARGET),arm-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-aros)
|
ifeq ($(FULL_TARGET),arm-aros)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-freertos)
|
ifeq ($(FULL_TARGET),arm-freertos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-ios)
|
ifeq ($(FULL_TARGET),arm-ios)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-aix)
|
ifeq ($(FULL_TARGET),powerpc64-aix)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),avr-embedded)
|
ifeq ($(FULL_TARGET),avr-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),armeb-linux)
|
ifeq ($(FULL_TARGET),armeb-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),mips-linux)
|
ifeq ($(FULL_TARGET),mips-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),mipsel-linux)
|
ifeq ($(FULL_TARGET),mipsel-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),mipsel-embedded)
|
ifeq ($(FULL_TARGET),mipsel-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),mipsel-android)
|
ifeq ($(FULL_TARGET),mipsel-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),mips64el-linux)
|
ifeq ($(FULL_TARGET),mips64el-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),jvm-java)
|
ifeq ($(FULL_TARGET),jvm-java)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),jvm-android)
|
ifeq ($(FULL_TARGET),jvm-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i8086-embedded)
|
ifeq ($(FULL_TARGET),i8086-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i8086-msdos)
|
ifeq ($(FULL_TARGET),i8086-msdos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i8086-win16)
|
ifeq ($(FULL_TARGET),i8086-win16)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-linux)
|
ifeq ($(FULL_TARGET),aarch64-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-freebsd)
|
ifeq ($(FULL_TARGET),aarch64-freebsd)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-darwin)
|
ifeq ($(FULL_TARGET),aarch64-darwin)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-win64)
|
ifeq ($(FULL_TARGET),aarch64-win64)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-android)
|
ifeq ($(FULL_TARGET),aarch64-android)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),aarch64-ios)
|
ifeq ($(FULL_TARGET),aarch64-ios)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),wasm32-embedded)
|
ifeq ($(FULL_TARGET),wasm32-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),wasm32-wasi)
|
ifeq ($(FULL_TARGET),wasm32-wasi)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc64-linux)
|
ifeq ($(FULL_TARGET),sparc64-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),riscv32-linux)
|
ifeq ($(FULL_TARGET),riscv32-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),riscv32-embedded)
|
ifeq ($(FULL_TARGET),riscv32-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),riscv64-linux)
|
ifeq ($(FULL_TARGET),riscv64-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),riscv64-embedded)
|
ifeq ($(FULL_TARGET),riscv64-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),xtensa-linux)
|
ifeq ($(FULL_TARGET),xtensa-linux)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),xtensa-embedded)
|
ifeq ($(FULL_TARGET),xtensa-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),xtensa-freertos)
|
ifeq ($(FULL_TARGET),xtensa-freertos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),z80-embedded)
|
ifeq ($(FULL_TARGET),z80-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),z80-zxspectrum)
|
ifeq ($(FULL_TARGET),z80-zxspectrum)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),z80-msxdos)
|
ifeq ($(FULL_TARGET),z80-msxdos)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),z80-amstradcpc)
|
ifeq ($(FULL_TARGET),z80-amstradcpc)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
ifeq ($(FULL_TARGET),i386-linux)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(WINDIR)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(WINDIR)
|
||||||
|
@ -50,7 +50,7 @@ fpcdir=../..
|
|||||||
target=win64
|
target=win64
|
||||||
|
|
||||||
[compiler]
|
[compiler]
|
||||||
includedir=$(INC) $(PROCINC)
|
includedir=$(INC) $(PROCINC) $(ARCH)
|
||||||
sourcedir=$(INC) $(PROCINC) $(COMMON) $(WINDIR)
|
sourcedir=$(INC) $(PROCINC) $(COMMON) $(WINDIR)
|
||||||
|
|
||||||
|
|
||||||
|
53
rtl/win64/aarch64/cpuwin.inc
Normal file
53
rtl/win64/aarch64/cpuwin.inc
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
Copyright (c) 1999-2006 by Florian Klaempfl and Pavel Ozerski
|
||||||
|
member of the Free Pascal development team.
|
||||||
|
|
||||||
|
FPC Pascal system unit aarch64 specific part for the Win64 API.
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
|
||||||
|
{$define FPC_SYSTEM_HAS_STACKTOP}
|
||||||
|
function StackTop: pointer; // assembler;nostackframe;
|
||||||
|
begin
|
||||||
|
result:=pointer($ffffffffffffffff);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function main_wrapper(arg: Pointer; proc: Pointer): ptrint; assembler; nostackframe;
|
||||||
|
asm
|
||||||
|
stp fp,lr,[sp, #-16]!
|
||||||
|
.seh_savefplr_x -16
|
||||||
|
.seh_endprologue
|
||||||
|
blr x1 // { "arg" is passed in x0 }
|
||||||
|
nop // { this nop is critical for exception handling }
|
||||||
|
ldp fp,lr,[sp], #16
|
||||||
|
.seh_handler __FPC_default_handler,@except,@unwind
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure Exe_entry(constref info: TEntryInformation);[public,alias:'_FPC_EXE_Entry'];
|
||||||
|
begin
|
||||||
|
SetupEntryInformation(info);
|
||||||
|
IsLibrary:=false;
|
||||||
|
{ install the handlers for exe only ?
|
||||||
|
or should we install them for DLL also ? (PM) }
|
||||||
|
ExitCode:=0;
|
||||||
|
asm
|
||||||
|
mov x0,#0
|
||||||
|
adrp x1,EntryInformation@PAGE
|
||||||
|
add x1,x1,EntryInformation@PAGEOFF
|
||||||
|
ldr x1,[x1,TEntryInformation.PascalMain]
|
||||||
|
adrp x8,main_wrapper@PAGE
|
||||||
|
add x8,x8,main_wrapper@PAGEOFF
|
||||||
|
blr x8
|
||||||
|
end ['X8'];
|
||||||
|
{ if we pass here there was no error ! }
|
||||||
|
system_exit;
|
||||||
|
end;
|
@ -50,10 +50,6 @@ var
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$ifdef CPUX86_64}
|
|
||||||
{$asmmode att}
|
|
||||||
{$endif CPUX86_64}
|
|
||||||
|
|
||||||
var
|
var
|
||||||
{$ifdef VER3_0}
|
{$ifdef VER3_0}
|
||||||
SysInstance : qword;
|
SysInstance : qword;
|
||||||
@ -65,42 +61,16 @@ var
|
|||||||
{$define FPC_SYSTEM_HAS_OSSETUPENTRYINFORMATION}
|
{$define FPC_SYSTEM_HAS_OSSETUPENTRYINFORMATION}
|
||||||
procedure OsSetupEntryInformation(constref info: TEntryInformation); forward;
|
procedure OsSetupEntryInformation(constref info: TEntryInformation); forward;
|
||||||
|
|
||||||
{$ifdef FPC_USE_WIN64_SEH}
|
procedure SetupEntryInformation(constref info: TEntryInformation);forward;
|
||||||
function main_wrapper(arg: Pointer; proc: Pointer): ptrint; assembler; nostackframe;
|
|
||||||
asm
|
|
||||||
subq $40, %rsp
|
|
||||||
.seh_stackalloc 40
|
|
||||||
.seh_endprologue
|
|
||||||
call %rdx { "arg" is passed in %rcx }
|
|
||||||
nop { this nop is critical for exception handling }
|
|
||||||
addq $40, %rsp
|
|
||||||
.seh_handler __FPC_default_handler,@except,@unwind
|
|
||||||
end;
|
|
||||||
{$endif FPC_USE_WIN64_SEH}
|
|
||||||
{$ifdef CPUAARCH64)}
|
|
||||||
function main_wrapper(arg: Pointer; proc: Pointer): ptrint; assembler; nostackframe;
|
|
||||||
asm
|
|
||||||
stp fp,lr,[sp, #-16]!
|
|
||||||
.seh_savefplr_x -16
|
|
||||||
.seh_endprologue
|
|
||||||
blr x1 // { "arg" is passed in x0 }
|
|
||||||
nop // { this nop is critical for exception handling }
|
|
||||||
ldp fp,lr,[sp], #16
|
|
||||||
.seh_handler __FPC_default_handler,@except,@unwind
|
|
||||||
end;
|
|
||||||
{$endif}
|
|
||||||
|
|
||||||
{$if defined(CPUX86_64)}
|
|
||||||
{$define FPC_SYSTEM_HAS_STACKTOP}
|
{$define FPC_SYSTEM_HAS_STACKTOP}
|
||||||
function StackTop: pointer; assembler;nostackframe;
|
function main_wrapper(arg: Pointer; proc: Pointer): ptrint; forward;
|
||||||
asm
|
|
||||||
movq %gs:(8),%rax
|
|
||||||
end;
|
|
||||||
{$endif}
|
|
||||||
|
|
||||||
{ include system independent routines }
|
{ include system independent routines }
|
||||||
{$I system.inc}
|
{$I system.inc}
|
||||||
|
|
||||||
|
{$I cpuwin.inc}
|
||||||
|
|
||||||
{*****************************************************************************
|
{*****************************************************************************
|
||||||
System Dependent Exit code
|
System Dependent Exit code
|
||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
@ -152,80 +122,6 @@ begin
|
|||||||
ExitProcess(exitcode);
|
ExitProcess(exitcode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
|
||||||
{ old compilers emitted a reference to _fltused if a module contains
|
|
||||||
floating type code so the linker could leave away floating point
|
|
||||||
libraries or not. VC does this as well so we need to define this
|
|
||||||
symbol as well (FK)
|
|
||||||
}
|
|
||||||
_fltused : int64;cvar;public;
|
|
||||||
{ value of the stack segment
|
|
||||||
to check if the call stack can be written on exceptions }
|
|
||||||
_SS : Cardinal;
|
|
||||||
|
|
||||||
|
|
||||||
{$ifdef VER3_0}
|
|
||||||
procedure Exe_entry;[public,alias:'_FPC_EXE_Entry'];
|
|
||||||
{$else VER3_0}
|
|
||||||
procedure Exe_entry(constref info: TEntryInformation);[public,alias:'_FPC_EXE_Entry'];
|
|
||||||
{$endif VER3_0}
|
|
||||||
begin
|
|
||||||
{$ifndef VER3_0}
|
|
||||||
SetupEntryInformation(info);
|
|
||||||
{$endif VER3_0}
|
|
||||||
IsLibrary:=false;
|
|
||||||
{ install the handlers for exe only ?
|
|
||||||
or should we install them for DLL also ? (PM) }
|
|
||||||
{$ifndef SYSTEM_USE_WIN_SEH}
|
|
||||||
install_exception_handlers;
|
|
||||||
{$endif SYSTEM_USE_WIN_SEH}
|
|
||||||
ExitCode:=0;
|
|
||||||
{$if defined(CPUX86_64)}
|
|
||||||
asm
|
|
||||||
xorq %rax,%rax
|
|
||||||
movw %ss,%ax
|
|
||||||
movl %eax,_SS(%rip)
|
|
||||||
movq %rbp,%rsi
|
|
||||||
xorq %rbp,%rbp
|
|
||||||
{$ifdef VER3_0}
|
|
||||||
{$ifdef FPC_USE_WIN64_SEH}
|
|
||||||
xor %rcx,%rcx
|
|
||||||
lea PASCALMAIN(%rip),%rdx
|
|
||||||
call main_wrapper
|
|
||||||
{$else FPC_USE_WIN64_SEH}
|
|
||||||
call PASCALMAIN
|
|
||||||
{$endif FPC_USE_WIN64_SEH}
|
|
||||||
{$else VER3_0}
|
|
||||||
{$ifdef FPC_USE_WIN64_SEH}
|
|
||||||
xor %rcx,%rcx
|
|
||||||
lea EntryInformation(%rip),%rdx
|
|
||||||
movq TEntryInformation.PascalMain(%rdx),%rdx
|
|
||||||
call main_wrapper
|
|
||||||
{$else FPC_USE_WIN64_SEH}
|
|
||||||
lea EntryInformation(%rip),%rdx
|
|
||||||
call TEntryInformation.PascalMain(%rdx)
|
|
||||||
{$endif FPC_USE_WIN64_SEH}
|
|
||||||
{$endif VER3_0}
|
|
||||||
movq %rsi,%rbp
|
|
||||||
end ['RSI','RBP']; { <-- specifying RSI allows compiler to save/restore it properly }
|
|
||||||
{$elseif defined(CPUAARCH64)}
|
|
||||||
asm
|
|
||||||
mov x0,#0
|
|
||||||
adrp x1,EntryInformation@PAGE
|
|
||||||
add x1,x1,EntryInformation@PAGEOFF
|
|
||||||
ldr x1,[x1,TEntryInformation.PascalMain]
|
|
||||||
adrp x8,main_wrapper@PAGE
|
|
||||||
add x8,x8,main_wrapper@PAGEOFF
|
|
||||||
blr x8
|
|
||||||
end ['X8'];
|
|
||||||
{$else}
|
|
||||||
info.PascalMain();
|
|
||||||
{$endif}
|
|
||||||
{ if we pass here there was no error ! }
|
|
||||||
system_exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{$ifdef VER3_0}
|
{$ifdef VER3_0}
|
||||||
procedure _FPC_DLLMainCRTStartup(_hinstance : qword;_dllreason : dword;_dllparam:Pointer);stdcall;public name '_DLLMainCRTStartup';
|
procedure _FPC_DLLMainCRTStartup(_hinstance : qword;_dllreason : dword;_dllparam:Pointer);stdcall;public name '_DLLMainCRTStartup';
|
||||||
begin
|
begin
|
||||||
@ -247,53 +143,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
{$endif VER3_0}
|
{$endif VER3_0}
|
||||||
|
|
||||||
{$ifdef CPUX86_64}
|
|
||||||
function is_prefetch(p : pointer) : boolean;
|
|
||||||
var
|
|
||||||
a : array[0..15] of byte;
|
|
||||||
doagain : boolean;
|
|
||||||
instrlo,instrhi,opcode : byte;
|
|
||||||
i : longint;
|
|
||||||
begin
|
|
||||||
result:=false;
|
|
||||||
{ read memory savely without causing another exeception }
|
|
||||||
if not(ReadProcessMemory(GetCurrentProcess,p,@a,sizeof(a),nil)) then
|
|
||||||
exit;
|
|
||||||
i:=0;
|
|
||||||
doagain:=true;
|
|
||||||
while doagain and (i<15) do
|
|
||||||
begin
|
|
||||||
opcode:=a[i];
|
|
||||||
instrlo:=opcode and $f;
|
|
||||||
instrhi:=opcode and $f0;
|
|
||||||
case instrhi of
|
|
||||||
{ prefix? }
|
|
||||||
$20,$30:
|
|
||||||
doagain:=(instrlo and 7)=6;
|
|
||||||
$60:
|
|
||||||
doagain:=(instrlo and $c)=4;
|
|
||||||
$f0:
|
|
||||||
doagain:=instrlo in [0,2,3];
|
|
||||||
$0:
|
|
||||||
begin
|
|
||||||
result:=(instrlo=$f) and (a[i+1] in [$d,$18]);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
else
|
|
||||||
doagain:=false;
|
|
||||||
end;
|
|
||||||
inc(i);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
{$endif}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Hardware exception handling
|
// Hardware exception handling
|
||||||
//
|
//
|
||||||
{$I seh64.inc}
|
{$I seh64.inc}
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TVectoredExceptionHandler = function (excep : PExceptionPointers) : Longint;
|
TVectoredExceptionHandler = function (excep : PExceptionPointers) : Longint;
|
||||||
|
|
||||||
|
133
rtl/win64/x86_64/cpuwin.inc
Normal file
133
rtl/win64/x86_64/cpuwin.inc
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
Copyright (c) 1999-2006 by Florian Klaempfl and Pavel Ozerski
|
||||||
|
member of the Free Pascal development team.
|
||||||
|
|
||||||
|
FPC Pascal system unit x86-64 specific part for the Win64 API.
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
|
||||||
|
{$asmmode att}
|
||||||
|
|
||||||
|
function StackTop: pointer; assembler;nostackframe;
|
||||||
|
asm
|
||||||
|
movq %gs:(8),%rax
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$ifdef FPC_USE_WIN64_SEH}
|
||||||
|
function main_wrapper(arg: Pointer; proc: Pointer): ptrint; assembler; nostackframe;
|
||||||
|
asm
|
||||||
|
subq $40, %rsp
|
||||||
|
.seh_stackalloc 40
|
||||||
|
.seh_endprologue
|
||||||
|
call %rdx { "arg" is passed in %rcx }
|
||||||
|
nop { this nop is critical for exception handling }
|
||||||
|
addq $40, %rsp
|
||||||
|
.seh_handler __FPC_default_handler,@except,@unwind
|
||||||
|
end;
|
||||||
|
{$endif FPC_USE_WIN64_SEH}
|
||||||
|
|
||||||
|
var
|
||||||
|
{ old compilers emitted a reference to _fltused if a module contains
|
||||||
|
floating type code so the linker could leave away floating point
|
||||||
|
libraries or not. VC does this as well so we need to define this
|
||||||
|
symbol as well (FK)
|
||||||
|
}
|
||||||
|
_fltused : int64;cvar;public;
|
||||||
|
{ value of the stack segment
|
||||||
|
to check if the call stack can be written on exceptions }
|
||||||
|
_SS : Cardinal;
|
||||||
|
|
||||||
|
{$ifdef VER3_0}
|
||||||
|
procedure Exe_entry;[public,alias:'_FPC_EXE_Entry'];
|
||||||
|
{$else VER3_0}
|
||||||
|
procedure Exe_entry(constref info: TEntryInformation);[public,alias:'_FPC_EXE_Entry'];
|
||||||
|
{$endif VER3_0}
|
||||||
|
begin
|
||||||
|
{$ifndef VER3_0}
|
||||||
|
SetupEntryInformation(info);
|
||||||
|
{$endif VER3_0}
|
||||||
|
IsLibrary:=false;
|
||||||
|
{ install the handlers for exe only ?
|
||||||
|
or should we install them for DLL also ? (PM) }
|
||||||
|
{$ifndef SYSTEM_USE_WIN_SEH}
|
||||||
|
install_exception_handlers;
|
||||||
|
{$endif SYSTEM_USE_WIN_SEH}
|
||||||
|
ExitCode:=0;
|
||||||
|
asm
|
||||||
|
xorq %rax,%rax
|
||||||
|
movw %ss,%ax
|
||||||
|
movl %eax,_SS(%rip)
|
||||||
|
movq %rbp,%rsi
|
||||||
|
xorq %rbp,%rbp
|
||||||
|
{$ifdef VER3_0}
|
||||||
|
{$ifdef FPC_USE_WIN64_SEH}
|
||||||
|
xor %rcx,%rcx
|
||||||
|
lea PASCALMAIN(%rip),%rdx
|
||||||
|
call main_wrapper
|
||||||
|
{$else FPC_USE_WIN64_SEH}
|
||||||
|
call PASCALMAIN
|
||||||
|
{$endif FPC_USE_WIN64_SEH}
|
||||||
|
{$else VER3_0}
|
||||||
|
{$ifdef FPC_USE_WIN64_SEH}
|
||||||
|
xor %rcx,%rcx
|
||||||
|
lea EntryInformation(%rip),%rdx
|
||||||
|
movq TEntryInformation.PascalMain(%rdx),%rdx
|
||||||
|
call main_wrapper
|
||||||
|
{$else FPC_USE_WIN64_SEH}
|
||||||
|
lea EntryInformation(%rip),%rdx
|
||||||
|
call TEntryInformation.PascalMain(%rdx)
|
||||||
|
{$endif FPC_USE_WIN64_SEH}
|
||||||
|
{$endif VER3_0}
|
||||||
|
movq %rsi,%rbp
|
||||||
|
end ['RSI','RBP']; { <-- specifying RSI allows compiler to save/restore it properly }
|
||||||
|
{ if we pass here there was no error ! }
|
||||||
|
system_exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function is_prefetch(p : pointer) : boolean;
|
||||||
|
var
|
||||||
|
a : array[0..15] of byte;
|
||||||
|
doagain : boolean;
|
||||||
|
instrlo,instrhi,opcode : byte;
|
||||||
|
i : longint;
|
||||||
|
begin
|
||||||
|
result:=false;
|
||||||
|
{ read memory savely without causing another exeception }
|
||||||
|
if not(ReadProcessMemory(GetCurrentProcess,p,@a,sizeof(a),nil)) then
|
||||||
|
exit;
|
||||||
|
i:=0;
|
||||||
|
doagain:=true;
|
||||||
|
while doagain and (i<15) do
|
||||||
|
begin
|
||||||
|
opcode:=a[i];
|
||||||
|
instrlo:=opcode and $f;
|
||||||
|
instrhi:=opcode and $f0;
|
||||||
|
case instrhi of
|
||||||
|
{ prefix? }
|
||||||
|
$20,$30:
|
||||||
|
doagain:=(instrlo and 7)=6;
|
||||||
|
$60:
|
||||||
|
doagain:=(instrlo and $c)=4;
|
||||||
|
$f0:
|
||||||
|
doagain:=instrlo in [0,2,3];
|
||||||
|
$0:
|
||||||
|
begin
|
||||||
|
result:=(instrlo=$f) and (a[i+1] in [$d,$18]);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
doagain:=false;
|
||||||
|
end;
|
||||||
|
inc(i);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user