Skip to content

Commit

Permalink
Style Darwin/aarch64 port
Browse files Browse the repository at this point in the history
  • Loading branch information
nabijaczleweli committed Apr 12, 2023
1 parent 5a1d821 commit 75ffee0
Show file tree
Hide file tree
Showing 17 changed files with 277 additions and 286 deletions.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Expand Up @@ -52,6 +52,10 @@ if(INFOWARE_USE_X11 AND WIN32)
message(WARNING "INFOWARE_USE_X11 specified, but compiling for Win32, WinAPI will be used instead.")
endif()

if(INFOWARE_USE_OPENGL AND APPLE)
message(WARNING "INFOWARE_USE_OPENGL specified, but compiling for Darwin, Metal will be used instead.")
endif()

file(GLOB_RECURSE infoware_source_files LIST_DIRECTORIES false CONFIGURE_DEPENDS src/*.cpp)
if (APPLE)
file(GLOB_RECURSE infoware_objc_source_files LIST_DIRECTORIES FALSE CONFIGURE_DEPENDS src/*.mm)
Expand Down
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -18,8 +18,8 @@ A usable `git` binary is required by default, to clone https://github.com/pciuti
|-------------------------------------------|-----------------------------------|--------------|---------------|
| `INFOWARE_USE_X11` | Use X11 for display detection | `X11` | <Win32/Darwin |
| `INFOWARE_USE_D3D` | Use D3D for GPU detection | `dxgi` | >OpenCL |
| `INFOWARE_USE_OPENCL` | Use OpenCL for GPU detection | `OpenCL` | <D3D |
| `INFOWARE_USE_OPENGL` | Use OpenGL for GPU detection |OS-dependent\*| <OpenGL |
| `INFOWARE_USE_OPENCL` | Use OpenCL for GPU detection | `OpenCL` | <D3D >Darwin |
| `INFOWARE_USE_OPENGL` | Use OpenGL for GPU detection |OS-dependent\*| <Darwin |


\*Consult the section under the `if(INFOWARE_USE_OPENGL)` condition in `CMakeLists.txt` for variants.
4 changes: 2 additions & 2 deletions examples/cpu.cpp
Expand Up @@ -64,8 +64,8 @@ int main() {
std::make_pair("SSE ", iware::cpu::instruction_set_t::sse), //
std::make_pair("SSE2 ", iware::cpu::instruction_set_t::sse2), //
std::make_pair("SSE3 ", iware::cpu::instruction_set_t::sse3), //
std::make_pair("AVX ", iware::cpu::instruction_set_t::avx),
std::make_pair("Neon ", iware::cpu::instruction_set_t::neon)})
std::make_pair("AVX ", iware::cpu::instruction_set_t::avx), //
std::make_pair("Neon ", iware::cpu::instruction_set_t::neon)})
std::cout << " " << set.first << ": " << iware::cpu::instruction_set_supported(set.second) << '\n';
}

Expand Down
82 changes: 43 additions & 39 deletions include/infoware/cpu.hpp
Expand Up @@ -35,6 +35,7 @@ namespace iware {
};

enum class instruction_set_t {
// x86
s3d_now,
s3d_now_extended,
mmx,
Expand Down Expand Up @@ -81,45 +82,48 @@ namespace iware {

x64,
x87_fpu,
fhm,
dotprod,
rdm,
lse,
pmnull,
specres,
sb,
frintts,
lrcpc,
lrcpc2,
fcma,
jscvt,
pauth,
pauth2,
fpac,
dpb,
dpb2,
bf16,
i8mm,
ecv,
les2,
csv2,
csv3,
dit,
fp16,
ssbs,
bti,
fp_sync_exception,
neon,
armv8_1_atomics,
armv8_2_fhm,
armv8_2_compnum,
watchpoint,
breakpoint,
armv8_crc32,
armv8_gpi,
adv_simd,
adv_simd_hpfp_cvt,
ucnormal_mem,


// ARM
fhm,
dotprod,
rdm,
lse,
pmnull,
specres,
sb,
frintts,
lrcpc,
lrcpc2,
fcma,
jscvt,
pauth,
pauth2,
fpac,
dpb,
dpb2,
bf16,
i8mm,
ecv,
les2,
csv2,
csv3,
dit,
fp16,
ssbs,
bti,
fp_sync_exception,
neon,
armv8_1_atomics,
armv8_2_fhm,
armv8_2_compnum,
watchpoint,
breakpoint,
armv8_crc32,
armv8_gpi,
adv_simd,
adv_simd_hpfp_cvt,
ucnormal_mem,
};

enum class cache_type_t {
Expand Down
4 changes: 1 addition & 3 deletions include/infoware/detail/cpuid.hpp
Expand Up @@ -12,18 +12,16 @@

#pragma once

#include <infoware/platform.hpp>

#include <infoware/linkage.hpp>

#include <cstdint>


namespace iware {
namespace detail {
#if INFOWARE_X86
INFOWARE_API_LINKAGE_INTERNAL void cpuid(std::int32_t (&out)[4], std::int32_t x);

INFOWARE_API_LINKAGE_INTERNAL std::uint64_t xgetbv(std::uint32_t x);
#endif
} // namespace detail
} // namespace iware
8 changes: 5 additions & 3 deletions include/infoware/platform.hpp
Expand Up @@ -9,12 +9,14 @@
// You should have received a copy of the CC0 Public Domain Dedication along with this software.
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>


#pragma once

#if defined(__i386__) || defined(__x86_64__) || defined (_M_X64) || defined (_M_IX86)

#if defined(__i386__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86)
#define INFOWARE_X86 1
#endif /* x86 */

#if defined (__arm64__) || defined (_M_ARM64)
#if defined(__arm64__) || defined(_M_ARM64)
#define INFOWARE_ARM 1
#endif /* arm */
#endif /* ARM */
156 changes: 78 additions & 78 deletions src/cpu/instruction_set/instruction_set_darwin.cpp
Expand Up @@ -27,45 +27,45 @@ static std::pair<const char* const*, const char* const*> instruction_set_to_name
static const char* sse2[] = {"SSE2"};
static const char* sse3[] = {"SSSE3", "SSE3"};
static const char* avx[] = {"AVX"};
static const char* fhm[] = { "FHM" };
static const char* dotprod[] = { "DOTPROD" };
static const char* rdm[] = { "RDM" };
static const char* lse[] = { "LSE" };
static const char* pmnull[] = { "PMNULL" };
static const char* specres[] = { "SPECRES" };
static const char* sb[] = { "SB" };
static const char* frintts[] = { "FRINTTS" };
static const char* lrcpc[] = { "LRCPC" };
static const char* lrcpc2[] = { "LRCPC2" };
static const char* fcma[] = { "FCMA" };
static const char* jscvt[] = { "JSCVT" };
static const char* pauth[] = { "PAUTH" };
static const char* pauth2[] = { "PAUTH2" };
static const char* fpac[] = { "FPAC" };
static const char* dpb[] = { "DPB" };
static const char* dpb2[] = { "DPB2" };
static const char* bf16[] = { "BF16" };
static const char* i8mm[] = { "I8MM" };
static const char* ecv[] = { "ECV" };
static const char* les2[] = { "LES2" };
static const char* csv2[] = { "CSV2" };
static const char* csv3[] = { "CSV3" };
static const char* dit[] = { "DIT" };
static const char* fp16[] = { "FP16" };
static const char* ssbs[] = { "SSBS" };
static const char* bti[] = { "BTI" };
static const char* fp_sync_exception[] = { "FP_SYNC_EXCEPTION" };
static const char* neon[] = { "NEON" };
static const char* armv8_1_atomics[] = { "ARMV8_1_ATOMICS" };
static const char* armv8_2_fhm[] = { "ARMV8_2_FHM" };
static const char* armv8_2_compnum[] = { "ARMV8_2_COMPNUM" };
static const char* watchpoint[] = { "WATCHPOINT" };
static const char* breakpoint[] = { "BREAKPOINT" };
static const char* armv8_crc32[] = { "ARMV8_CRC32" };
static const char* armv8_gpi[] = { "ARMV8_GPI" };
static const char* adv_simd[] = { "ADV_SIMD" };
static const char* adv_simd_hpfp_cvt[] = { "ADV_SIMD_HPFP_CVT" };
static const char* ucnormal_mem[] = { "UCNORMAL_MEM" };
static const char* fhm[] = {"FHM"};
static const char* dotprod[] = {"DOTPROD"};
static const char* rdm[] = {"RDM"};
static const char* lse[] = {"LSE"};
static const char* pmnull[] = {"PMNULL"};
static const char* specres[] = {"SPECRES"};
static const char* sb[] = {"SB"};
static const char* frintts[] = {"FRINTTS"};
static const char* lrcpc[] = {"LRCPC"};
static const char* lrcpc2[] = {"LRCPC2"};
static const char* fcma[] = {"FCMA"};
static const char* jscvt[] = {"JSCVT"};
static const char* pauth[] = {"PAUTH"};
static const char* pauth2[] = {"PAUTH2"};
static const char* fpac[] = {"FPAC"};
static const char* dpb[] = {"DPB"};
static const char* dpb2[] = {"DPB2"};
static const char* bf16[] = {"BF16"};
static const char* i8mm[] = {"I8MM"};
static const char* ecv[] = {"ECV"};
static const char* les2[] = {"LES2"};
static const char* csv2[] = {"CSV2"};
static const char* csv3[] = {"CSV3"};
static const char* dit[] = {"DIT"};
static const char* fp16[] = {"FP16"};
static const char* ssbs[] = {"SSBS"};
static const char* bti[] = {"BTI"};
static const char* fp_sync_exception[] = {"FP_SYNC_EXCEPTION"};
static const char* neon[] = {"NEON"};
static const char* armv8_1_atomics[] = {"ARMV8_1_ATOMICS"};
static const char* armv8_2_fhm[] = {"ARMV8_2_FHM"};
static const char* armv8_2_compnum[] = {"ARMV8_2_COMPNUM"};
static const char* watchpoint[] = {"WATCHPOINT"};
static const char* breakpoint[] = {"BREAKPOINT"};
static const char* armv8_crc32[] = {"ARMV8_CRC32"};
static const char* armv8_gpi[] = {"ARMV8_GPI"};
static const char* adv_simd[] = {"ADV_SIMD"};
static const char* adv_simd_hpfp_cvt[] = {"ADV_SIMD_HPFP_CVT"};
static const char* ucnormal_mem[] = {"UCNORMAL_MEM"};


#define HANDLED_CASE(iset, variable) \
Expand All @@ -79,45 +79,45 @@ static std::pair<const char* const*, const char* const*> instruction_set_to_name
HANDLED_CASE(sse2, sse2)
HANDLED_CASE(sse3, sse3)
HANDLED_CASE(avx, avx)
HANDLED_CASE(fhm, fhm)
HANDLED_CASE(dotprod, dotprod)
HANDLED_CASE(rdm, rdm)
HANDLED_CASE(lse, lse)
HANDLED_CASE(pmnull, pmnull)
HANDLED_CASE(specres, specres)
HANDLED_CASE(sb, sb)
HANDLED_CASE(frintts, frintts)
HANDLED_CASE(lrcpc, lrcpc)
HANDLED_CASE(lrcpc2, lrcpc2)
HANDLED_CASE(fcma, fcma)
HANDLED_CASE(jscvt, jscvt)
HANDLED_CASE(pauth, pauth)
HANDLED_CASE(pauth2, pauth2)
HANDLED_CASE(fpac, fpac)
HANDLED_CASE(dpb, dpb)
HANDLED_CASE(dpb2, dpb2)
HANDLED_CASE(bf16, bf16)
HANDLED_CASE(i8mm, i8mm)
HANDLED_CASE(ecv, ecv)
HANDLED_CASE(les2, les2)
HANDLED_CASE(csv2, csv2)
HANDLED_CASE(csv3, csv3)
HANDLED_CASE(dit, dit)
HANDLED_CASE(fp16, fp16)
HANDLED_CASE(ssbs, ssbs)
HANDLED_CASE(bti, bti)
HANDLED_CASE(fp_sync_exception, fp_sync_exception)
HANDLED_CASE(neon, neon)
HANDLED_CASE(armv8_1_atomics, armv8_1_atomics)
HANDLED_CASE(armv8_2_fhm, armv8_2_fhm)
HANDLED_CASE(armv8_2_compnum, armv8_2_compnum)
HANDLED_CASE(watchpoint, watchpoint)
HANDLED_CASE(breakpoint, breakpoint)
HANDLED_CASE(armv8_crc32, armv8_crc32)
HANDLED_CASE(armv8_gpi, armv8_gpi)
HANDLED_CASE(adv_simd, adv_simd)
HANDLED_CASE(adv_simd_hpfp_cvt, adv_simd_hpfp_cvt)
HANDLED_CASE(ucnormal_mem, ucnormal_mem)
HANDLED_CASE(fhm, fhm)
HANDLED_CASE(dotprod, dotprod)
HANDLED_CASE(rdm, rdm)
HANDLED_CASE(lse, lse)
HANDLED_CASE(pmnull, pmnull)
HANDLED_CASE(specres, specres)
HANDLED_CASE(sb, sb)
HANDLED_CASE(frintts, frintts)
HANDLED_CASE(lrcpc, lrcpc)
HANDLED_CASE(lrcpc2, lrcpc2)
HANDLED_CASE(fcma, fcma)
HANDLED_CASE(jscvt, jscvt)
HANDLED_CASE(pauth, pauth)
HANDLED_CASE(pauth2, pauth2)
HANDLED_CASE(fpac, fpac)
HANDLED_CASE(dpb, dpb)
HANDLED_CASE(dpb2, dpb2)
HANDLED_CASE(bf16, bf16)
HANDLED_CASE(i8mm, i8mm)
HANDLED_CASE(ecv, ecv)
HANDLED_CASE(les2, les2)
HANDLED_CASE(csv2, csv2)
HANDLED_CASE(csv3, csv3)
HANDLED_CASE(dit, dit)
HANDLED_CASE(fp16, fp16)
HANDLED_CASE(ssbs, ssbs)
HANDLED_CASE(bti, bti)
HANDLED_CASE(fp_sync_exception, fp_sync_exception)
HANDLED_CASE(neon, neon)
HANDLED_CASE(armv8_1_atomics, armv8_1_atomics)
HANDLED_CASE(armv8_2_fhm, armv8_2_fhm)
HANDLED_CASE(armv8_2_compnum, armv8_2_compnum)
HANDLED_CASE(watchpoint, watchpoint)
HANDLED_CASE(breakpoint, breakpoint)
HANDLED_CASE(armv8_crc32, armv8_crc32)
HANDLED_CASE(armv8_gpi, armv8_gpi)
HANDLED_CASE(adv_simd, adv_simd)
HANDLED_CASE(adv_simd_hpfp_cvt, adv_simd_hpfp_cvt)
HANDLED_CASE(ucnormal_mem, ucnormal_mem)

default:
return {nullptr, nullptr};
Expand Down

0 comments on commit 75ffee0

Please sign in to comment.