From 6e77ce999a49c85fb8a6dc378993d37c3557784c Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 1 Jan 2024 00:00:08 +0100 Subject: [ARM64] Improved fast path for unaligned access to device memory (for NVidia cards) --- src/libtools/signals.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/libtools') diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 856a5b55..cc9c4968 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -574,7 +574,7 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) uint64_t value = p->uc_mcontext.regs[val]; if(scale==3 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<2; ++i) - ((uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; + ((volatile uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; } else for(int i=0; i<(1<>(i*8))&0xff; @@ -593,7 +593,7 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) uint64_t value = p->uc_mcontext.regs[val]; if(size==8 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<2; ++i) - ((uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; + ((volatile uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; } else for(int i=0; i>(i*8))&0xff; @@ -617,7 +617,7 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) __uint128_t value = fpsimd->vregs[val]; if(scale>2 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<(1<<(scale-2)); ++i) - ((uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; + ((volatile uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; } else for(int i=0; i<(1<>(i*8))&0xff; @@ -642,7 +642,7 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) __uint128_t value = fpsimd->vregs[val]; if(scale>2 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<(1<<(scale-2)); ++i) - ((uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; + ((volatile uint32_t*)addr)[i] = (value>>(i*32))&0xffffffff; } else for(int i=0; i<(1<>(i*8))&0xff; @@ -666,7 +666,7 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) __uint128_t value = 0; if(scale>2 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<(1<<(scale-2)); ++i) - value |= ((__uint128_t)(((uint32_t*)addr)[i]))<<(i*32); + value |= ((__uint128_t)(((volatile uint32_t*)addr)[i]))<<(i*32); } else for(int i=0; i<(1<2 && (((uintptr_t)addr)&3)==0) { for(int i=0; i<(1<<(scale-2)); ++i) - value |= ((__uint128_t)(((uint32_t*)addr)[i]))<<(i*32); + value |= ((__uint128_t)(((volatile uint32_t*)addr)[i]))<<(i*32); } else for(int i=0; i<(1<