< prev index next >

src/os_cpu/linux_arm/vm/orderAccess_linux_arm.inline.hpp

Print this page
rev 13030 : [mq]: add_const

*** 1,7 **** /* ! * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 129,189 **** // specializations for Aarch64 // TODO-AARCH64: evaluate effectiveness of ldar*/stlr* implementations compared to 32-bit ARM approach #ifdef AARCH64 ! template<> inline jbyte OrderAccess::specialized_load_acquire<jbyte>(volatile jbyte* p) { volatile jbyte result; __asm__ volatile( "ldarb %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jshort OrderAccess::specialized_load_acquire<jshort>(volatile jshort* p) { volatile jshort result; __asm__ volatile( "ldarh %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jint OrderAccess::specialized_load_acquire<jint>(volatile jint* p) { volatile jint result; __asm__ volatile( "ldar %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jfloat OrderAccess::specialized_load_acquire<jfloat>(volatile jfloat* p) { ! return jfloat_cast(specialized_load_acquire((volatile jint*)p)); } // This is implicit as jlong and intptr_t are both "long int" ! //template<> inline jlong OrderAccess::specialized_load_acquire(volatile jlong* p) { ! // return (volatile jlong)specialized_load_acquire((volatile intptr_t*)p); //} ! template<> inline intptr_t OrderAccess::specialized_load_acquire<intptr_t>(volatile intptr_t* p) { volatile intptr_t result; __asm__ volatile( "ldar %[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jdouble OrderAccess::specialized_load_acquire<jdouble>(volatile jdouble* p) { ! return jdouble_cast(specialized_load_acquire((volatile intptr_t*)p)); } template<> inline void OrderAccess::specialized_release_store<jbyte>(volatile jbyte* p, jbyte v) { __asm__ volatile( --- 129,189 ---- // specializations for Aarch64 // TODO-AARCH64: evaluate effectiveness of ldar*/stlr* implementations compared to 32-bit ARM approach #ifdef AARCH64 ! template<> inline jbyte OrderAccess::specialized_load_acquire<jbyte>(const volatile jbyte* p) { volatile jbyte result; __asm__ volatile( "ldarb %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jshort OrderAccess::specialized_load_acquire<jshort>(const volatile jshort* p) { volatile jshort result; __asm__ volatile( "ldarh %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jint OrderAccess::specialized_load_acquire<jint>(const volatile jint* p) { volatile jint result; __asm__ volatile( "ldar %w[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jfloat OrderAccess::specialized_load_acquire<jfloat>(const volatile jfloat* p) { ! return jfloat_cast(specialized_load_acquire((const volatile jint*)p)); } // This is implicit as jlong and intptr_t are both "long int" ! //template<> inline jlong OrderAccess::specialized_load_acquire(const volatile jlong* p) { ! // return (volatile jlong)specialized_load_acquire((const volatile intptr_t*)p); //} ! template<> inline intptr_t OrderAccess::specialized_load_acquire<intptr_t>(const volatile intptr_t* p) { volatile intptr_t result; __asm__ volatile( "ldar %[res], [%[ptr]]" : [res] "=&r" (result) : [ptr] "r" (p) : "memory"); return result; } ! template<> inline jdouble OrderAccess::specialized_load_acquire<jdouble>(const volatile jdouble* p) { ! return jdouble_cast(specialized_load_acquire((const volatile intptr_t*)p)); } template<> inline void OrderAccess::specialized_release_store<jbyte>(volatile jbyte* p, jbyte v) { __asm__ volatile(
< prev index next >