Andrei Pelinescu-Onciul 23 роки тому
батько
коміт
cd87f1782e
1 змінених файлів з 13 додано та 2 видалено
  1. 13 2
      fastlock.h

+ 13 - 2
fastlock.h

@@ -37,12 +37,12 @@ inline static int tsl(fl_lock_t* lock)
 	asm volatile(
 		" btsl $0, %1 \n\t"
 		" adcl $0, %0 \n\t"
-		: "=q" (val), "=m" (*lock) : "0"(val) : "memory" /* "cc" */
+		: "=q" (val), "=m" (*lock) : "0"(val) : "memory", "cc" /* "cc" */
 	);
 #else
 	val=1;
 	asm volatile( 
-		" xchg %b0, %1" : "=q" (val), "=m" (*lock) : "0" (val) : "memory"
+		" xchg %b1, %0" : "=q" (val), "=m" (*lock) : "0" (val) : "memory"
 	);
 #endif /*NOSMP*/
 #elif defined __sparc
@@ -53,6 +53,13 @@ inline static int tsl(fl_lock_t* lock)
 #endif
 			: "=r"(val) : "r"(lock):"memory"
 	);
+	
+#elif defined __armv4l
+	asm volatile(
+			"swp [%1], %0 \n\t"
+			"=r" (val), "=m" (*lock): "0" (val) : "memory"
+	);
+	
 #else
 #error "unknown arhitecture"
 #endif
@@ -99,6 +106,10 @@ inline static void release_lock(fl_lock_t* lock)
 			: "r" (lock)
 			: "memory"
 	);
+#elif defined __armv4l
+	asm volatile(
+		"mov $0, [%0]" : /*no output*/: "r"(lock): "memory"
+	);
 #else
 #error "unknown arhitecture"
 #endif