You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/10/16 20:21:16 UTC

svn commit: r826025 - in /commons/sandbox/runtime/trunk/src/main/native: Makefile.in configure os/darwin/arch_i386.S os/darwin/arch_x86_64.S os/darwin/atomics.c os/linux/arch_i386.S os/linux/arch_x86_64.S os/linux/atomics.c test/testcase.c

Author: mturk
Date: Fri Oct 16 18:21:16 2009
New Revision: 826025

URL: http://svn.apache.org/viewvc?rev=826025&view=rev
Log:
use assembly atomics

Added:
    commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_i386.S
    commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_x86_64.S
    commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_i386.S
    commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_x86_64.S
Removed:
    commons/sandbox/runtime/trunk/src/main/native/os/darwin/atomics.c
    commons/sandbox/runtime/trunk/src/main/native/os/linux/atomics.c
Modified:
    commons/sandbox/runtime/trunk/src/main/native/Makefile.in
    commons/sandbox/runtime/trunk/src/main/native/configure
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c

Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=826025&r1=826024&r2=826025&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Fri Oct 16 18:21:16 2009
@@ -35,6 +35,7 @@
 AS=@as@
 AR=@ar@
 ARFLAGS=@arflags@
+ASFLAGS=@asflags@
 RANLIB=@ranlib@
 PREFIX=@prefix@
 LIBDIR=@libdir@
@@ -140,7 +141,7 @@
 	$(SRCDIR)/os/unix/time.$(OBJ) \
 	$(SRCDIR)/os/unix/uuid.$(OBJ) \
 	$(SRCDIR)/os/unix/uutils.$(OBJ) \
-	$(SRCDIR)/os/linux/atomics.$(OBJ) \
+	$(SRCDIR)/os/linux/arch_$(MACH).$(OBJ) \
 	$(SRCDIR)/os/linux/cpu.$(OBJ) \
 	$(SRCDIR)/os/linux/env.$(OBJ) \
 	$(SRCDIR)/os/linux/execmem.$(OBJ) \
@@ -209,7 +210,7 @@
 	$(SRCDIR)/os/unix/time.$(OBJ) \
 	$(SRCDIR)/os/unix/uuid.$(OBJ) \
 	$(SRCDIR)/os/unix/uutils.$(OBJ) \
-	$(SRCDIR)/os/darwin/atomics.$(OBJ) \
+	$(SRCDIR)/os/darwin/arch_$(MACH).$(OBJ) \
 	$(SRCDIR)/os/darwin/cpu.$(OBJ) \
 	$(SRCDIR)/os/darwin/env.$(OBJ) \
 	$(SRCDIR)/os/darwin/platform.$(OBJ) \
@@ -243,7 +244,7 @@
 	$(SRCDIR)/os/unix/time.$(OBJ) \
 	$(SRCDIR)/os/unix/uuid.$(OBJ) \
 	$(SRCDIR)/os/unix/uutils.$(OBJ) \
-	$(SRCDIR)/os/hpux/atomics.$(OBJ) \
+	$(SRCDIR)/os/hpux/arch_$(MACH).$(OBJ) \
 	$(SRCDIR)/os/hpux/cpu.$(OBJ) \
 	$(SRCDIR)/os/hpux/env.$(OBJ) \
 	$(SRCDIR)/os/hpux/group.$(OBJ) \
@@ -310,6 +311,9 @@
 .c.$(OBJ):
 	$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c -o $@ $<
 
+.S.$(OBJ):
+	$(AS) $(ASFLAGS) -o $@ $<
+
 .cpp.$(OBJ):
 	$(CXX) $(CFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<
 

Modified: commons/sandbox/runtime/trunk/src/main/native/configure
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure?rev=826025&r1=826024&r2=826025&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/configure (original)
+++ commons/sandbox/runtime/trunk/src/main/native/configure Fri Oct 16 18:21:16 2009
@@ -62,7 +62,7 @@
 cxx="${CXX:=g++}"
 ar="${AR:=ar}"
 link=""
-as="${AS:=gcc}"
+as="${AS:=as}"
 arflags="${ARFLAGS:=ru}"
 ranlib="${RANLIB:=ranlib}"
 topdir="${TOPDIR:=`dirname $0`}"
@@ -382,8 +382,12 @@
 esac
 
 case "$mach" in
-    amd64    )
-        mach=x86_64
+    amd64|x86_64 )
+        test ".$has_64_bit" = .yes && mach=x86_64
+        test ".$has_32_bit" = .yes && mach=i386
+    ;;
+    ia64         )
+        test ".$has_32_bit" = .yes && mach=i386
     ;;
     i[3-7]86 )
         mach=i386
@@ -462,8 +466,10 @@
         r="`uname -r | sed 's/5.//'`"
         if [ ".$mach" = .sparc ]; then
             varadds ccflags -xarch=sparc
+            varadds asflags -xarch=sparc
         else
             varadds ccflags -fast -xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil
+            test ".$bits" = .64 && varadds asflags -xarch=amd64
         fi
         varadds cppopts -DSOLARIS2=$r
         if [ ".$has_native_threads" = .yes ]; then
@@ -487,6 +493,7 @@
         varadds ccflags -Ae +O2 -z +Z
         varadds ldflags -lrt -lpthread -ldld -lm
         varadds shflags +Z -b
+        varadds asflags +Z
         test ".$mach" = .parisc && so=.sl
         test ".$java_pinc" = . && java_pinc=hp-ux
         ;;
@@ -560,6 +567,7 @@
         if [ ".$mach" = .parisc64 ]; then
             varadds ccflags +DA2.0W
             varadds exflags +DA2.0W
+            varadds asflags +DA2.0W
         fi
         ;;
     hpux32-cc    )
@@ -599,6 +607,14 @@
         ;;
 esac
 
+case "$host$bits-$cc" in
+    *64-gcc )
+        varadds asflags --64
+    ;;
+    *32-gcc )
+        varadds asflags --32
+    ;;
+esac
 $EECHO "Configuring \033[1mApache Commons Runtime $vmajor.$vminor.$vpatch\033[0m. for $host$bits-$cc"
 echo ""
 

Added: commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_i386.S
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_i386.S?rev=826025&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_i386.S (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_i386.S Fri Oct 16 18:21:16 2009
@@ -0,0 +1,69 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+    .text
+    .align 8
+
+/* Atomic Add32
+ */
+    .globl ACR_AtomicAdd32
+    .type  ACR_AtomicAdd32, @function
+ACR_AtomicAdd32:
+    movl        4(%esp), %ecx
+    movl        8(%esp), %eax
+    movl           %eax, %edx
+
+    lock                           /* ; lock the bus                        */
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst += inc                          */
+                                   /* ; %eax = tmp                          */
+
+    addl           %edx, %eax      /* ; return %eax + inc                   */
+    ret
+
+/* Atomic Inc32
+ */
+    .globl ACR_AtomicInc32
+    .type  ACR_AtomicInc32, @function
+ACR_AtomicInc32:
+    movl        4(%esp), %ecx
+    movl           $1,   %eax      /* ; %edx = 1                            */
+    movl           %eax, %edx      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst += 1                            */
+                                   /* ; %eax = tmp                          */
+
+    incl            %eax
+    ret
+
+/* Atomic Dec32
+ */
+    .globl acr_AtomicDec32
+    .type  acr_AtomicDec32, @function
+ACR_AtomicDec32:
+    movl        4(%esp), %ecx
+    movl           $-1,  %eax      /* ; %edx = -1                           */
+    movl           %eax, %edx      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst -= 1                            */
+                                   /* ; %eax = tmp                          */
+
+    decl            %eax
+    ret

Added: commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_x86_64.S
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_x86_64.S?rev=826025&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_x86_64.S (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/darwin/arch_x86_64.S Fri Oct 16 18:21:16 2009
@@ -0,0 +1,69 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+    .text
+    .align 16
+
+/* Atomic Add32
+ */
+    .globl ACR_AtomicAdd32
+    .type  ACR_AtomicAdd32, @function
+ACR_AtomicAdd32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           %esi, %edx      /* ; %edx = inc                          */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock                           /* ; lock the bus                        */
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst += inc                          */
+                                   /* ; %eax = tmp                          */
+
+    addl           %edx, %eax      /* ; return %eax + inc                   */
+    ret
+
+/* Atomic Inc32
+ */
+    .globl ACR_AtomicInc32
+    .type  ACR_AtomicInc32, @function
+ACR_AtomicInc32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           $1,   %edx      /* ; %edx = 1                            */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst += 1                            */
+                                   /* ; %eax = tmp                          */
+
+    incl            %eax
+    ret
+
+/* Atomic Dec32
+ */
+    .globl acr_AtomicDec32
+    .type  acr_AtomicDec32, @function
+ACR_AtomicDec32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           $-1,   %edx     /* ; %edx = -1                           */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst -= 1                            */
+                                   /* ; %eax = tmp                          */
+
+    decl            %eax
+    ret

Added: commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_i386.S
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_i386.S?rev=826025&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_i386.S (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_i386.S Fri Oct 16 18:21:16 2009
@@ -0,0 +1,69 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+    .text
+    .align 8
+
+/* Atomic Add32
+ */
+    .globl ACR_AtomicAdd32
+    .type  ACR_AtomicAdd32, @function
+ACR_AtomicAdd32:
+    movl        4(%esp), %ecx
+    movl        8(%esp), %eax
+    movl           %eax, %edx
+
+    lock                           /* ; lock the bus                        */
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst += inc                          */
+                                   /* ; %eax = tmp                          */
+
+    addl           %edx, %eax      /* ; return %eax + inc                   */
+    ret
+
+/* Atomic Inc32
+ */
+    .globl ACR_AtomicInc32
+    .type  ACR_AtomicInc32, @function
+ACR_AtomicInc32:
+    movl        4(%esp), %ecx
+    movl           $1,   %eax      /* ; %edx = 1                            */
+    movl           %eax, %edx      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst += 1                            */
+                                   /* ; %eax = tmp                          */
+
+    incl            %eax
+    ret
+
+/* Atomic Dec32
+ */
+    .globl acr_AtomicDec32
+    .type  acr_AtomicDec32, @function
+ACR_AtomicDec32:
+    movl        4(%esp), %ecx
+    movl           $-1,  %eax      /* ; %edx = -1                           */
+    movl           %eax, %edx      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%ecx)    /* ; tmp = *dst                          */
+                                   /* ; dst -= 1                            */
+                                   /* ; %eax = tmp                          */
+
+    decl            %eax
+    ret

Added: commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_x86_64.S
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_x86_64.S?rev=826025&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_x86_64.S (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/arch_x86_64.S Fri Oct 16 18:21:16 2009
@@ -0,0 +1,69 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+    .text
+    .align 16
+
+/* Atomic Add32
+ */
+    .globl ACR_AtomicAdd32
+    .type  ACR_AtomicAdd32, @function
+ACR_AtomicAdd32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           %esi, %edx      /* ; %edx = inc                          */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock                           /* ; lock the bus                        */
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst += inc                          */
+                                   /* ; %eax = tmp                          */
+
+    addl           %edx, %eax      /* ; return %eax + inc                   */
+    ret
+
+/* Atomic Inc32
+ */
+    .globl ACR_AtomicInc32
+    .type  ACR_AtomicInc32, @function
+ACR_AtomicInc32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           $1,   %edx      /* ; %edx = 1                            */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst += 1                            */
+                                   /* ; %eax = tmp                          */
+
+    incl            %eax
+    ret
+
+/* Atomic Dec32
+ */
+    .globl acr_AtomicDec32
+    .type  acr_AtomicDec32, @function
+ACR_AtomicDec32:
+    movq           %rdi, %rcx      /* ; %rcx = dst                          */
+    movl           $-1,   %edx     /* ; %edx = -1                           */
+    movl           %edx, %eax      /* ;                                     */
+
+    lock
+    xaddl          %eax, (%rcx)    /* ; tmp = *dst                          */
+                                   /* ; dst -= 1                            */
+                                   /* ; %eax = tmp                          */
+
+    decl            %eax
+    ret

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=826025&r1=826024&r2=826025&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Fri Oct 16 18:21:16 2009
@@ -34,6 +34,7 @@
 #include "acr_callback.h"
 #include "acr_observer.h"
 #include "acr_system.h"
+#include "acr_atomics.h"
 
 #if defined (WIN32)
 #include <io.h>
@@ -691,26 +692,15 @@
     return r;
 }
 
-#if defined(SOLARIS2)
-#include <atomic.h>
-#endif
 
-static volatile unsigned int  dtf_counter = 0;
-static volatile unsigned int *dtf_called  = &dtf_counter;
+static acr_atomic32_t  dtf_counter = 0;
+static acr_atomic32_t *dtf_called  = &dtf_counter;
 static int dtf_cleanup(void *d, int type, unsigned int flags)
 {
     x_free(d);
     /* This should be atomic counter
      */
-#if defined(__GNUC__)
-    __sync_fetch_and_add(dtf_called, 1);
-#elif defined(_MSC_VER)
-    InterlockedIncrement(dtf_called);
-#elif defined(SOLARIS2)
-    atomic_inc_32(dtf_called);
-#else
-    *dtf_called += 1;
-#endif
+    ACR_AtomicInc32(&dtf_counter);
     return 0;
 }
 
@@ -729,6 +719,8 @@
 ACR_JNI_EXPORT_DECLARE(int, TestPrivate, test054)(ACR_JNISTDARGS, jint d)
 {
     acr_ioh_dump_stats();
+    fprintf(stdout, "DTF counter %d\n", dtf_counter);
+    fflush(stdout);
     return dtf_counter;
 }