Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Libretro
flycast
Commits
6c5321ff
Commit
6c5321ff
authored
Jan 14, 2019
by
Flyinghead
Browse files
arm64 dynarec
parent
02a774da
Changes
69
Expand all
Hide whitespace changes
Inline
Side-by-side
Makefile.common
View file @
6c5321ff
...
...
@@ -6,7 +6,8 @@ INCFLAGS += -I$(CORE_DIR)/core/libretro \
-I
$(DEPS_DIR)
\
-I
$(DEPS_DIR)
/picotcp/include
\
-I
$(DEPS_DIR)
/picotcp/modules
\
-I
$(LIBRETRO_COMM_DIR)
/include
-I
$(LIBRETRO_COMM_DIR)
/include
\
-I
$(DEPS_DIR)
/vixl
CORE_DEFINES
+=
-DNO_MMU
...
...
@@ -283,6 +284,28 @@ ifeq ($(WITH_DYNAREC), arm)
SOURCES_ASM
+=
$(CORE_DIR)
/core/rec-ARM/ngen_arm.S
endif
# Recompiler (ARM64)
ifeq
($(WITH_DYNAREC), arm64)
DYNAREC_USED
=
1
SOURCES_CXX
+=
$(CORE_DIR)
/core/rec-ARM64/rec_arm64.cpp
\
$(DEPS_DIR)
/vixl/code-buffer-vixl.cc
\
$(DEPS_DIR)
/vixl/compiler-intrinsics-vixl.cc
\
$(DEPS_DIR)
/vixl/cpu-features.cc
\
$(DEPS_DIR)
/vixl/utils-vixl.cc
\
$(DEPS_DIR)
/vixl/aarch64/assembler-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/cpu-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/cpu-features-auditor-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/decoder-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/disasm-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/instructions-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/instrument-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/logic-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/macro-assembler-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/operands-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/pointer-auth-aarch64.cc
\
$(DEPS_DIR)
/vixl/aarch64/simulator-aarch64.cc
endif
SOURCES_CXX
+=
$(CORE_DIR)
/core/libretro/libretro.cpp
\
$(CORE_DIR)
/core/libretro/audiostream.cpp
\
$(CORE_DIR)
/core/libretro/common.cpp
...
...
core/build.h
View file @
6c5321ff
...
...
@@ -136,6 +136,7 @@
#define CPU_MIPS 0x20000003
#define CPU_X64 0x20000004
#define CPU_GENERIC 0x20000005 //used for pnacl, emscripten, etc
#define CPU_ARM64 0x20000006
//FEAT_SHREC, FEAT_AREC, FEAT_DSPREC
#define DYNAREC_NONE 0x40000001
...
...
@@ -166,6 +167,10 @@
#ifndef HOST_CPU
#define HOST_CPU CPU_ARM
#endif
#elif defined(TARGET_LINUX_ARMv8)
#ifndef HOST_CPU
#define HOST_CPU CPU_ARM64
#endif
#elif defined(TARGET_LINUX_x86)
#ifndef HOST_CPU
#define HOST_CPU CPU_X86
...
...
core/deps/vixl/aarch32/assembler-aarch32.cc
0 → 100644
View file @
6c5321ff
This diff is collapsed.
Click to expand it.
core/deps/vixl/aarch32/assembler-aarch32.h
0 → 100644
View file @
6c5321ff
This diff is collapsed.
Click to expand it.
core/deps/vixl/aarch32/constants-aarch32.cc
0 → 100644
View file @
6c5321ff
// Copyright 2016, VIXL authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of ARM Limited nor the names of its contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
#include "aarch32/constants-aarch32.h"
#include "utils-vixl.h"
namespace
vixl
{
namespace
aarch32
{
// Start of generated code.
const
char
*
ToCString
(
InstructionType
type
)
{
switch
(
type
)
{
case
kAdc
:
return
"adc"
;
case
kAdcs
:
return
"adcs"
;
case
kAdd
:
return
"add"
;
case
kAdds
:
return
"adds"
;
case
kAddw
:
return
"addw"
;
case
kAdr
:
return
"adr"
;
case
kAnd
:
return
"and"
;
case
kAnds
:
return
"ands"
;
case
kAsr
:
return
"asr"
;
case
kAsrs
:
return
"asrs"
;
case
kB
:
return
"b"
;
case
kBfc
:
return
"bfc"
;
case
kBfi
:
return
"bfi"
;
case
kBic
:
return
"bic"
;
case
kBics
:
return
"bics"
;
case
kBkpt
:
return
"bkpt"
;
case
kBl
:
return
"bl"
;
case
kBlx
:
return
"blx"
;
case
kBx
:
return
"bx"
;
case
kBxj
:
return
"bxj"
;
case
kCbnz
:
return
"cbnz"
;
case
kCbz
:
return
"cbz"
;
case
kClrex
:
return
"clrex"
;
case
kClz
:
return
"clz"
;
case
kCmn
:
return
"cmn"
;
case
kCmp
:
return
"cmp"
;
case
kCrc32b
:
return
"crc32b"
;
case
kCrc32cb
:
return
"crc32cb"
;
case
kCrc32ch
:
return
"crc32ch"
;
case
kCrc32cw
:
return
"crc32cw"
;
case
kCrc32h
:
return
"crc32h"
;
case
kCrc32w
:
return
"crc32w"
;
case
kDmb
:
return
"dmb"
;
case
kDsb
:
return
"dsb"
;
case
kEor
:
return
"eor"
;
case
kEors
:
return
"eors"
;
case
kFldmdbx
:
return
"fldmdbx"
;
case
kFldmiax
:
return
"fldmiax"
;
case
kFstmdbx
:
return
"fstmdbx"
;
case
kFstmiax
:
return
"fstmiax"
;
case
kHlt
:
return
"hlt"
;
case
kHvc
:
return
"hvc"
;
case
kIsb
:
return
"isb"
;
case
kIt
:
return
"it"
;
case
kLda
:
return
"lda"
;
case
kLdab
:
return
"ldab"
;
case
kLdaex
:
return
"ldaex"
;
case
kLdaexb
:
return
"ldaexb"
;
case
kLdaexd
:
return
"ldaexd"
;
case
kLdaexh
:
return
"ldaexh"
;
case
kLdah
:
return
"ldah"
;
case
kLdm
:
return
"ldm"
;
case
kLdmda
:
return
"ldmda"
;
case
kLdmdb
:
return
"ldmdb"
;
case
kLdmea
:
return
"ldmea"
;
case
kLdmed
:
return
"ldmed"
;
case
kLdmfa
:
return
"ldmfa"
;
case
kLdmfd
:
return
"ldmfd"
;
case
kLdmib
:
return
"ldmib"
;
case
kLdr
:
return
"ldr"
;
case
kLdrb
:
return
"ldrb"
;
case
kLdrd
:
return
"ldrd"
;
case
kLdrex
:
return
"ldrex"
;
case
kLdrexb
:
return
"ldrexb"
;
case
kLdrexd
:
return
"ldrexd"
;
case
kLdrexh
:
return
"ldrexh"
;
case
kLdrh
:
return
"ldrh"
;
case
kLdrsb
:
return
"ldrsb"
;
case
kLdrsh
:
return
"ldrsh"
;
case
kLsl
:
return
"lsl"
;
case
kLsls
:
return
"lsls"
;
case
kLsr
:
return
"lsr"
;
case
kLsrs
:
return
"lsrs"
;
case
kMla
:
return
"mla"
;
case
kMlas
:
return
"mlas"
;
case
kMls
:
return
"mls"
;
case
kMov
:
return
"mov"
;
case
kMovs
:
return
"movs"
;
case
kMovt
:
return
"movt"
;
case
kMovw
:
return
"movw"
;
case
kMrs
:
return
"mrs"
;
case
kMsr
:
return
"msr"
;
case
kMul
:
return
"mul"
;
case
kMuls
:
return
"muls"
;
case
kMvn
:
return
"mvn"
;
case
kMvns
:
return
"mvns"
;
case
kNop
:
return
"nop"
;
case
kOrn
:
return
"orn"
;
case
kOrns
:
return
"orns"
;
case
kOrr
:
return
"orr"
;
case
kOrrs
:
return
"orrs"
;
case
kPkhbt
:
return
"pkhbt"
;
case
kPkhtb
:
return
"pkhtb"
;
case
kPld
:
return
"pld"
;
case
kPldw
:
return
"pldw"
;
case
kPli
:
return
"pli"
;
case
kPop
:
return
"pop"
;
case
kPush
:
return
"push"
;
case
kQadd
:
return
"qadd"
;
case
kQadd16
:
return
"qadd16"
;
case
kQadd8
:
return
"qadd8"
;
case
kQasx
:
return
"qasx"
;
case
kQdadd
:
return
"qdadd"
;
case
kQdsub
:
return
"qdsub"
;
case
kQsax
:
return
"qsax"
;
case
kQsub
:
return
"qsub"
;
case
kQsub16
:
return
"qsub16"
;
case
kQsub8
:
return
"qsub8"
;
case
kRbit
:
return
"rbit"
;
case
kRev
:
return
"rev"
;
case
kRev16
:
return
"rev16"
;
case
kRevsh
:
return
"revsh"
;
case
kRor
:
return
"ror"
;
case
kRors
:
return
"rors"
;
case
kRrx
:
return
"rrx"
;
case
kRrxs
:
return
"rrxs"
;
case
kRsb
:
return
"rsb"
;
case
kRsbs
:
return
"rsbs"
;
case
kRsc
:
return
"rsc"
;
case
kRscs
:
return
"rscs"
;
case
kSadd16
:
return
"sadd16"
;
case
kSadd8
:
return
"sadd8"
;
case
kSasx
:
return
"sasx"
;
case
kSbc
:
return
"sbc"
;
case
kSbcs
:
return
"sbcs"
;
case
kSbfx
:
return
"sbfx"
;
case
kSdiv
:
return
"sdiv"
;
case
kSel
:
return
"sel"
;
case
kShadd16
:
return
"shadd16"
;
case
kShadd8
:
return
"shadd8"
;
case
kShasx
:
return
"shasx"
;
case
kShsax
:
return
"shsax"
;
case
kShsub16
:
return
"shsub16"
;
case
kShsub8
:
return
"shsub8"
;
case
kSmlabb
:
return
"smlabb"
;
case
kSmlabt
:
return
"smlabt"
;
case
kSmlad
:
return
"smlad"
;
case
kSmladx
:
return
"smladx"
;
case
kSmlal
:
return
"smlal"
;
case
kSmlalbb
:
return
"smlalbb"
;
case
kSmlalbt
:
return
"smlalbt"
;
case
kSmlald
:
return
"smlald"
;
case
kSmlaldx
:
return
"smlaldx"
;
case
kSmlals
:
return
"smlals"
;
case
kSmlaltb
:
return
"smlaltb"
;
case
kSmlaltt
:
return
"smlaltt"
;
case
kSmlatb
:
return
"smlatb"
;
case
kSmlatt
:
return
"smlatt"
;
case
kSmlawb
:
return
"smlawb"
;
case
kSmlawt
:
return
"smlawt"
;
case
kSmlsd
:
return
"smlsd"
;
case
kSmlsdx
:
return
"smlsdx"
;
case
kSmlsld
:
return
"smlsld"
;
case
kSmlsldx
:
return
"smlsldx"
;
case
kSmmla
:
return
"smmla"
;
case
kSmmlar
:
return
"smmlar"
;
case
kSmmls
:
return
"smmls"
;
case
kSmmlsr
:
return
"smmlsr"
;
case
kSmmul
:
return
"smmul"
;
case
kSmmulr
:
return
"smmulr"
;
case
kSmuad
:
return
"smuad"
;
case
kSmuadx
:
return
"smuadx"
;
case
kSmulbb
:
return
"smulbb"
;
case
kSmulbt
:
return
"smulbt"
;
case
kSmull
:
return
"smull"
;
case
kSmulls
:
return
"smulls"
;
case
kSmultb
:
return
"smultb"
;
case
kSmultt
:
return
"smultt"
;
case
kSmulwb
:
return
"smulwb"
;
case
kSmulwt
:
return
"smulwt"
;
case
kSmusd
:
return
"smusd"
;
case
kSmusdx
:
return
"smusdx"
;
case
kSsat
:
return
"ssat"
;
case
kSsat16
:
return
"ssat16"
;
case
kSsax
:
return
"ssax"
;
case
kSsub16
:
return
"ssub16"
;
case
kSsub8
:
return
"ssub8"
;
case
kStl
:
return
"stl"
;
case
kStlb
:
return
"stlb"
;
case
kStlex
:
return
"stlex"
;
case
kStlexb
:
return
"stlexb"
;
case
kStlexd
:
return
"stlexd"
;
case
kStlexh
:
return
"stlexh"
;
case
kStlh
:
return
"stlh"
;
case
kStm
:
return
"stm"
;
case
kStmda
:
return
"stmda"
;
case
kStmdb
:
return
"stmdb"
;
case
kStmea
:
return
"stmea"
;
case
kStmed
:
return
"stmed"
;
case
kStmfa
:
return
"stmfa"
;
case
kStmfd
:
return
"stmfd"
;
case
kStmib
:
return
"stmib"
;
case
kStr
:
return
"str"
;
case
kStrb
:
return
"strb"
;
case
kStrd
:
return
"strd"
;
case
kStrex
:
return
"strex"
;
case
kStrexb
:
return
"strexb"
;
case
kStrexd
:
return
"strexd"
;
case
kStrexh
:
return
"strexh"
;
case
kStrh
:
return
"strh"
;
case
kSub
:
return
"sub"
;
case
kSubs
:
return
"subs"
;
case
kSubw
:
return
"subw"
;
case
kSvc
:
return
"svc"
;
case
kSxtab
:
return
"sxtab"
;
case
kSxtab16
:
return
"sxtab16"
;
case
kSxtah
:
return
"sxtah"
;
case
kSxtb
:
return
"sxtb"
;
case
kSxtb16
:
return
"sxtb16"
;
case
kSxth
:
return
"sxth"
;
case
kTbb
:
return
"tbb"
;
case
kTbh
:
return
"tbh"
;
case
kTeq
:
return
"teq"
;
case
kTst
:
return
"tst"
;
case
kUadd16
:
return
"uadd16"
;
case
kUadd8
:
return
"uadd8"
;
case
kUasx
:
return
"uasx"
;
case
kUbfx
:
return
"ubfx"
;
case
kUdf
:
return
"udf"
;
case
kUdiv
:
return
"udiv"
;
case
kUhadd16
:
return
"uhadd16"
;
case
kUhadd8
:
return
"uhadd8"
;
case
kUhasx
:
return
"uhasx"
;
case
kUhsax
:
return
"uhsax"
;
case
kUhsub16
:
return
"uhsub16"
;
case
kUhsub8
:
return
"uhsub8"
;
case
kUmaal
:
return
"umaal"
;
case
kUmlal
:
return
"umlal"
;
case
kUmlals
:
return
"umlals"
;
case
kUmull
:
return
"umull"
;
case
kUmulls
:
return
"umulls"
;
case
kUqadd16
:
return
"uqadd16"
;
case
kUqadd8
:
return
"uqadd8"
;
case
kUqasx
:
return
"uqasx"
;
case
kUqsax
:
return
"uqsax"
;
case
kUqsub16
:
return
"uqsub16"
;
case
kUqsub8
:
return
"uqsub8"
;
case
kUsad8
:
return
"usad8"
;
case
kUsada8
:
return
"usada8"
;
case
kUsat
:
return
"usat"
;
case
kUsat16
:
return
"usat16"
;
case
kUsax
:
return
"usax"
;
case
kUsub16
:
return
"usub16"
;
case
kUsub8
:
return
"usub8"
;
case
kUxtab
:
return
"uxtab"
;
case
kUxtab16
:
return
"uxtab16"
;
case
kUxtah
:
return
"uxtah"
;
case
kUxtb
:
return
"uxtb"
;
case
kUxtb16
:
return
"uxtb16"
;
case
kUxth
:
return
"uxth"
;
case
kVaba
:
return
"vaba"
;
case
kVabal
:
return
"vabal"
;
case
kVabd
:
return
"vabd"
;
case
kVabdl
:
return
"vabdl"
;
case
kVabs
:
return
"vabs"
;
case
kVacge
:
return
"vacge"
;
case
kVacgt
:
return
"vacgt"
;
case
kVacle
:
return
"vacle"
;
case
kVaclt
:
return
"vaclt"
;
case
kVadd
:
return
"vadd"
;
case
kVaddhn
:
return
"vaddhn"
;