From: Twinaphex Date: Fri, 22 Apr 2016 15:06:53 +0000 (+0200) Subject: Merge pull request #33 from dankcushions/master X-Git-Tag: r24l~857 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18ef7635b0b265350eb8304a26edeb8d4b0b2e19;hp=4ed8f00a1221b15925117f1c7413b4640e6e7198;p=pcsx_rearmed.git Merge pull request #33 from dankcushions/master Merging in latest upstream changes --- diff --git a/configure b/configure index 4ffa3a21..4d9b566c 100755 --- a/configure +++ b/configure @@ -24,7 +24,13 @@ compile_binary() check_define() { - $CC -E -dD $CFLAGS include/arm_features.h | grep -q $1 || return 1 + $CC -E -dD $CFLAGS include/arm_features.h | grep -q "$1" || return 1 + return 0 +} + +check_define_val() +{ + $CC -E -dD $CFLAGS include/arm_features.h | grep "$1" | awk '{print $3}' return 0 } @@ -477,6 +483,11 @@ if [ "x$need_xlib" = "xyes" ]; then check_xlib_headers || fail "please install libx11-dev" fi +sizeof_long=`check_define_val __SIZEOF_LONG__` +if [ "x$sizeof_long" = "x4" ]; then + CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" +fi + cat > $TMPC <= 8) #define HAVE_ARMV8 #define HAVE_ARMV7 #define HAVE_ARMV6 #define HAVE_ARMV5 -#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__) +#elif (defined(__ARM_ARCH) && __ARM_ARCH >= 7) \ + || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__) #define HAVE_ARMV7 #define HAVE_ARMV6 #define HAVE_ARMV5 -#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ - || defined(__ARM_ARCH_6M__) +#elif (defined(__ARM_ARCH) && __ARM_ARCH >= 6) \ + || defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ + || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ + || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ + || defined(__ARM_ARCH_6M__) #define HAVE_ARMV6 #define HAVE_ARMV5 +#define HAVE_PRE_ARMV7 #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5E__) \ || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__) #define HAVE_ARMV5 +#define HAVE_PRE_ARMV7 + +#elif defined(__arm__) + +#define HAVE_PRE_ARMV7 #endif diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c index 46ee0207..d2c904c5 100644 --- a/libpcsxcore/cdriso.c +++ b/libpcsxcore/cdriso.c @@ -39,6 +39,8 @@ #include #include +#define OFF_T_MSB ((off_t)1 << (sizeof(off_t) * 8 - 1)) + unsigned int cdrIsoMultidiskCount; unsigned int cdrIsoMultidiskSelect; @@ -83,7 +85,7 @@ static unsigned int pregapOffset; static struct { unsigned char buff_raw[16][CD_FRAMESIZE_RAW]; unsigned char buff_compressed[CD_FRAMESIZE_RAW * 16 + 100]; - unsigned int *index_table; + off_t *index_table; unsigned int index_len; unsigned int block_shift; unsigned int current_block; @@ -791,8 +793,9 @@ static int handlepbp(const char *isofile) { unsigned int dontcare[6]; } index_entry; char psar_sig[11]; - unsigned int t, cd_length, cdimg_base; - unsigned int offsettab[8], psisoimg_offs; + off_t psisoimg_offs, cdimg_base; + unsigned int t, cd_length; + unsigned int offsettab[8]; const char *ext = NULL; int i, ret; @@ -801,7 +804,7 @@ static int handlepbp(const char *isofile) { if (ext == NULL || (strcmp(ext, ".pbp") != 0 && strcmp(ext, ".PBP") != 0)) return -1; - fseek(cdHandle, 0, SEEK_SET); + fseeko(cdHandle, 0, SEEK_SET); numtracks = 0; @@ -811,7 +814,7 @@ static int handlepbp(const char *isofile) { goto fail_io; } - ret = fseek(cdHandle, pbp_hdr.psar_offs, SEEK_SET); + ret = fseeko(cdHandle, pbp_hdr.psar_offs, SEEK_SET); if (ret != 0) { SysPrintf("failed to seek to %x\n", pbp_hdr.psar_offs); goto fail_io; @@ -822,7 +825,7 @@ static int handlepbp(const char *isofile) { psar_sig[10] = 0; if (strcmp(psar_sig, "PSTITLEIMG") == 0) { // multidisk image? - ret = fseek(cdHandle, pbp_hdr.psar_offs + 0x200, SEEK_SET); + ret = fseeko(cdHandle, pbp_hdr.psar_offs + 0x200, SEEK_SET); if (ret != 0) { SysPrintf("failed to seek to %x\n", pbp_hdr.psar_offs + 0x200); goto fail_io; @@ -848,9 +851,9 @@ static int handlepbp(const char *isofile) { psisoimg_offs += offsettab[cdrIsoMultidiskSelect]; - ret = fseek(cdHandle, psisoimg_offs, SEEK_SET); + ret = fseeko(cdHandle, psisoimg_offs, SEEK_SET); if (ret != 0) { - SysPrintf("failed to seek to %x\n", psisoimg_offs); + SysPrintf("failed to seek to %llx\n", (long long)psisoimg_offs); goto fail_io; } @@ -864,9 +867,9 @@ static int handlepbp(const char *isofile) { } // seek to TOC - ret = fseek(cdHandle, psisoimg_offs + 0x800, SEEK_SET); + ret = fseeko(cdHandle, psisoimg_offs + 0x800, SEEK_SET); if (ret != 0) { - SysPrintf("failed to seek to %x\n", psisoimg_offs + 0x800); + SysPrintf("failed to seek to %llx\n", (long long)psisoimg_offs + 0x800); goto fail_io; } @@ -900,7 +903,7 @@ static int handlepbp(const char *isofile) { sec2msf(t, ti[numtracks].length); // seek to ISO index - ret = fseek(cdHandle, psisoimg_offs + 0x4000, SEEK_SET); + ret = fseeko(cdHandle, psisoimg_offs + 0x4000, SEEK_SET); if (ret != 0) { SysPrintf("failed to seek to ISO index\n"); goto fail_io; @@ -958,6 +961,7 @@ static int handlecbin(const char *isofile) { unsigned char rsv_06[2]; } ciso_hdr; const char *ext = NULL; + unsigned int *index_table = NULL; unsigned int index = 0, plain; int i, ret; @@ -979,7 +983,7 @@ static int handlecbin(const char *isofile) { return -1; } if (ciso_hdr.header_size != 0 && ciso_hdr.header_size != sizeof(ciso_hdr)) { - ret = fseek(cdHandle, ciso_hdr.header_size, SEEK_SET); + ret = fseeko(cdHandle, ciso_hdr.header_size, SEEK_SET); if (ret != 0) { SysPrintf("failed to seek to %x\n", ciso_hdr.header_size); return -1; @@ -994,30 +998,33 @@ static int handlecbin(const char *isofile) { compr_img->current_block = (unsigned int)-1; compr_img->index_len = ciso_hdr.total_bytes / ciso_hdr.block_size; - compr_img->index_table = malloc((compr_img->index_len + 1) * sizeof(compr_img->index_table[0])); - if (compr_img->index_table == NULL) + index_table = malloc((compr_img->index_len + 1) * sizeof(index_table[0])); + if (index_table == NULL) goto fail_io; - ret = fread(compr_img->index_table, sizeof(compr_img->index_table[0]), compr_img->index_len, cdHandle); + ret = fread(index_table, sizeof(index_table[0]), compr_img->index_len, cdHandle); if (ret != compr_img->index_len) { SysPrintf("failed to read index table\n"); goto fail_index; } + compr_img->index_table = malloc((compr_img->index_len + 1) * sizeof(compr_img->index_table[0])); + if (compr_img->index_table == NULL) + goto fail_index; + for (i = 0; i < compr_img->index_len + 1; i++) { - index = compr_img->index_table[i]; + index = index_table[i]; plain = index & 0x80000000; index &= 0x7fffffff; - compr_img->index_table[i] = (index << ciso_hdr.align) | plain; + compr_img->index_table[i] = (off_t)index << ciso_hdr.align; + if (plain) + compr_img->index_table[i] |= OFF_T_MSB; } - if ((long long)index << ciso_hdr.align >= 0x80000000ll) - SysPrintf("warning: ciso img too large, expect problems\n"); return 0; fail_index: - free(compr_img->index_table); - compr_img->index_table = NULL; + free(index_table); fail_io: if (compr_img != NULL) { free(compr_img); @@ -1120,8 +1127,9 @@ static int uncompress2(void *out, unsigned long *out_size, void *in, unsigned lo static int cdread_compressed(FILE *f, unsigned int base, void *dest, int sector) { unsigned long cdbuffer_size, cdbuffer_size_expect; - unsigned int start_byte, size; + unsigned int size; int is_compressed; + off_t start_byte; int ret, block; if (base) @@ -1140,16 +1148,16 @@ static int cdread_compressed(FILE *f, unsigned int base, void *dest, int sector) return -1; } - start_byte = compr_img->index_table[block] & 0x7fffffff; - if (fseek(cdHandle, start_byte, SEEK_SET) != 0) { - SysPrintf("seek error for block %d at %x: ", - block, start_byte); + start_byte = compr_img->index_table[block] & ~OFF_T_MSB; + if (fseeko(cdHandle, start_byte, SEEK_SET) != 0) { + SysPrintf("seek error for block %d at %llx: ", + block, (long long)start_byte); perror(NULL); return -1; } - is_compressed = !(compr_img->index_table[block] & 0x80000000); - size = (compr_img->index_table[block + 1] & 0x7fffffff) - start_byte; + is_compressed = !(compr_img->index_table[block] & OFF_T_MSB); + size = (compr_img->index_table[block + 1] & ~OFF_T_MSB) - start_byte; if (size > sizeof(compr_img->buff_compressed)) { SysPrintf("block %d is too large: %u\n", block, size); return -1; @@ -1280,11 +1288,11 @@ static long CALLBACK ISOopen(void) { SysPrintf("[+sbi]"); } - fseek(cdHandle, 0, SEEK_END); + fseeko(cdHandle, 0, SEEK_END); // maybe user selected metadata file instead of main .bin .. bin_filename = GetIsoFile(); - if (ftell(cdHandle) < 2352 * 0x10) { + if (ftello(cdHandle) < 2352 * 0x10) { static const char *exts[] = { ".bin", ".BIN", ".img", ".IMG" }; FILE *tmpf = NULL; size_t i; @@ -1305,12 +1313,12 @@ static long CALLBACK ISOopen(void) { bin_filename = alt_bin_filename; fclose(cdHandle); cdHandle = tmpf; - fseek(cdHandle, 0, SEEK_END); + fseeko(cdHandle, 0, SEEK_END); } } // guess whether it is mode1/2048 - if (ftell(cdHandle) % 2048 == 0) { + if (ftello(cdHandle) % 2048 == 0) { unsigned int modeTest = 0; fseek(cdHandle, 0, SEEK_SET); fread(&modeTest, 4, 1, cdHandle); diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 556b512f..17d65ab8 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -24,6 +24,7 @@ #include "cdrom.h" #include "ppf.h" #include "psxdma.h" +#include "arm_features.h" /* logging */ #if 0 @@ -1006,7 +1007,7 @@ finish: #endif } -#ifdef __ARM_ARCH_7A__ +#ifdef HAVE_ARMV7 #define ssat32_to_16(v) \ asm("ssat %0,#16,%1" : "=r" (v) : "r" (v)) #else diff --git a/libpcsxcore/new_dynarec/linkage_arm.S b/libpcsxcore/new_dynarec/linkage_arm.S index 50b577b3..95af8b4e 100644 --- a/libpcsxcore/new_dynarec/linkage_arm.S +++ b/libpcsxcore/new_dynarec/linkage_arm.S @@ -116,10 +116,10 @@ ptr_hash_table: #endif .macro load_varadr reg var -#if defined(__ARM_ARCH_7A__) && !defined(__PIC__) +#if defined(HAVE_ARMV7) && !defined(__PIC__) movw \reg, #:lower16:\var movt \reg, #:upper16:\var -#elif defined(__ARM_ARCH_7A__) && defined(__MACH__) +#elif defined(HAVE_ARMV7) && defined(__MACH__) movw \reg, #:lower16:(\var-(1678f+8)) movt \reg, #:upper16:(\var-(1678f+8)) 1678: @@ -130,7 +130,7 @@ ptr_hash_table: .endm .macro load_varadr_ext reg var -#if defined(__ARM_ARCH_7A__) && defined(__MACH__) && defined(__PIC__) +#if defined(HAVE_ARMV7) && defined(__MACH__) && defined(__PIC__) movw \reg, #:lower16:(ptr_\var-(1678f+8)) movt \reg, #:upper16:(ptr_\var-(1678f+8)) 1678: @@ -141,7 +141,7 @@ ptr_hash_table: .endm .macro mov_16 reg imm -#ifdef __ARM_ARCH_7A__ +#ifdef HAVE_ARMV7 movw \reg, #\imm #else mov \reg, #(\imm & 0x00ff) @@ -150,7 +150,7 @@ ptr_hash_table: .endm .macro mov_24 reg imm -#ifdef __ARM_ARCH_7A__ +#ifdef HAVE_ARMV7 movw \reg, #(\imm & 0xffff) movt \reg, #(\imm >> 16) #else diff --git a/libpcsxcore/r3000a.h b/libpcsxcore/r3000a.h index 31aa3f8e..32538e58 100644 --- a/libpcsxcore/r3000a.h +++ b/libpcsxcore/r3000a.h @@ -40,10 +40,8 @@ typedef struct { extern R3000Acpu *psxCpu; extern R3000Acpu psxInt; -#if (defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__) || defined(__arm__)) && !defined(NOPSXREC) extern R3000Acpu psxRec; #define PSXREC -#endif typedef union { #if defined(__BIGENDIAN__) diff --git a/plugins/dfsound/arm_utils.S b/plugins/dfsound/arm_utils.S index 96523136..eaeca518 100644 --- a/plugins/dfsound/arm_utils.S +++ b/plugins/dfsound/arm_utils.S @@ -20,10 +20,10 @@ ptr_ChanBuf: .word ESYM(ChanBuf) .align 2 .macro load_varadr reg var -#if defined(__ARM_ARCH_7A__) && !defined(__PIC__) +#if defined(HAVE_ARMV7) && !defined(__PIC__) movw \reg, #:lower16:ESYM(\var) movt \reg, #:upper16:ESYM(\var) -#elif defined(__ARM_ARCH_7A__) && defined(__MACH__) +#elif defined(HAVE_ARMV7) && defined(__MACH__) movw \reg, #:lower16:(ptr_\var-(1678f+8)) movt \reg, #:upper16:(ptr_\var-(1678f+8)) 1678: diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c index c6a1bf5e..0058ad26 100644 --- a/plugins/dfsound/spu.c +++ b/plugins/dfsound/spu.c @@ -35,7 +35,7 @@ #include "arm_features.h" #endif -#ifdef __ARM_ARCH_7A__ +#ifdef HAVE_ARMV7 #define ssat32_to_16(v) \ asm("ssat %0,#16,%1" : "=r" (v) : "r" (v)) #else diff --git a/plugins/gpu_unai/gpulib_if.cpp b/plugins/gpu_unai/gpulib_if.cpp index 646b0f22..2dedbf83 100644 --- a/plugins/gpu_unai/gpulib_if.cpp +++ b/plugins/gpu_unai/gpulib_if.cpp @@ -23,6 +23,7 @@ #include #include #include "../gpulib/gpu.h" +#include "arm_features.h" #define u8 uint8_t #define s8 int8_t @@ -171,7 +172,7 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) unsigned int *list_end = list + list_len; linesInterlace = force_interlace; -#ifndef __ARM_ARCH_7A__ /* XXX */ +#ifdef HAVE_PRE_ARMV7 /* XXX */ linesInterlace |= gpu.status.interlace; #endif