Module Name:    src
Committed By:   tsutsui
Date:           Thu Mar 24 14:58:33 UTC 2011

Modified Files:
        src/sys/arch/x68k/include: bus.h

Log Message:
- make X68K_BUS_PERFORMANCE_HACK part default
- use volatile rather than dummy __asm() statements to avoid optimization

Tested on X68030.


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/x68k/include/bus.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/x68k/include/bus.h
diff -u src/sys/arch/x68k/include/bus.h:1.22 src/sys/arch/x68k/include/bus.h:1.23
--- src/sys/arch/x68k/include/bus.h:1.22	Fri Mar 19 14:20:56 2010
+++ src/sys/arch/x68k/include/bus.h	Thu Mar 24 14:58:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus.h,v 1.22 2010/03/19 14:20:56 tsutsui Exp $	*/
+/*	$NetBSD: bus.h,v 1.23 2011/03/24 14:58:33 tsutsui Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -37,14 +37,6 @@
 #ifndef _X68K_BUS_H_
 #define _X68K_BUS_H_
 
-#ifndef X68K_BUS_PERFORMANCE_HACK
-#if defined(__GNUC__) && defined(__STDC__)
-#define X68K_BUS_PERFORMANCE_HACK	1
-#else
-#define X68K_BUS_PERFORMANCE_HACK	0
-#endif
-#endif
-
 /*
  * Bus address and size types
  */
@@ -293,120 +285,72 @@
 _bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint8_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint8_t *regadr = (uint8_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint8_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_multi_1" : : : "memory");
-		*datap++ = *regadr;
-	}
-#else
+	regadr = (volatile uint8_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*datap++ = *(volatile uint8_t *)
-				__X68K_BUS_ADDR(t, bsh, offset);
-	}
-#endif
+	for (; count; count--)
+		*datap++ = *regadr;
 }
 
 static __inline void
 _bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint16_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint16_t *regadr = (uint16_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint16_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_multi_2" : : : "memory");
-		*datap++ = *regadr;
-	}
-#else
+	regadr = (volatile uint16_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*datap++ = *(volatile uint16_t *)
-				__X68K_BUS_ADDR(t, bsh, offset);
-	}
-#endif
+	for (; count; count--)
+		*datap++ = *regadr;
 }
 
 static __inline void
 _bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint32_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint32_t *regadr = (uint32_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint32_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_multi_4" : : : "memory");
-		*datap++ = *regadr;
-	}
-#else
+	regadr = (volatile uint32_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*datap++ = *(volatile uint32_t *)
-				__X68K_BUS_ADDR(t, bsh, offset);
-	}
-#endif
+	for (; count; count--)
+		*datap++ = *regadr;
 }
 
 static __inline void
 _bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint8_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint8_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_region_1" : : : "memory");
-		*datap++ = *addr++;
-	}
-#else
-	volatile uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint8_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*datap++ = *addr++;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint16_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint16_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_region_2" : : : "memory");
-		*datap++ = *addr++;
-	}
-#else
-	volatile uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint16_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*datap++ = *addr++;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint32_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint32_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_read_region_4" : : : "memory");
-		*datap++ = *addr++;
-	}
-#else
-	volatile uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint32_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*datap++ = *addr++;
-	}
-#endif
 }
 
 static __inline void
@@ -437,180 +381,108 @@
 _bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint8_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint8_t *regadr = (uint8_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint8_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_multi_1" : : : "memory");
-		*regadr = *datap++;
-	}
-#else
+	regadr = (volatile uint8_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*(volatile uint8_t *) __X68K_BUS_ADDR(t, bsh, offset)
-		    = *datap++;
-	}
-#endif
+	for (; count; count--)
+		*regadr = *datap++;
 }
 
 static __inline void
 _bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint16_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint16_t *regadr = (uint16_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint16_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_multi_2" : : : "memory");
-		*regadr = *datap++;
-	}
-#else
+	regadr = (volatile uint16_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*(volatile uint16_t *) __X68K_BUS_ADDR(t, bsh, offset)
-		    = *datap++;
-	}
-#endif
+	for (; count; count--)
+		*regadr = *datap++;
 }
 
 static __inline void
 _bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint32_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint32_t *regadr = (uint32_t *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint32_t *regadr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_multi_4" : : : "memory");
-		*regadr = *datap++;
-	}
-#else
+	regadr = (volatile uint32_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
-		*(volatile uint32_t *) __X68K_BUS_ADDR(t, bsh, offset)
-		    = *datap++;
-	}
-#endif
+	for (; count; count--)
+		*regadr = *datap++;
 }
 
 static __inline void
 _bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint8_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint8_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_region_1": : : "memory");
-		*addr++ = *datap++;
-	}
-#else
-	volatile uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint8_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = *datap++;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint16_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint16_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_region_2": : : "memory");
-		*addr++ = *datap++;
-	}
-#else
-	volatile uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint16_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = *datap++;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, const uint32_t *datap, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint32_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_write_region_4": : : "memory");
-		*addr++ = *datap++;
-	}
-#else
-	volatile uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint32_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = *datap++;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint8_t value, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint8_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_set_region_1" : : : "memory");
-		*addr++ = value;
-	}
-#else
-	volatile uint8_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint8_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = value;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint16_t value, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint16_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_set_region_2" : : : "memory");
-		*addr++ = value;
-	}
-#else
-	volatile uint16_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint16_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = value;
-	}
-#endif
 }
 
 static __inline void
 _bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t bsh,
     bus_size_t offset, uint32_t value, bus_size_t count)
 {
-#if X68K_BUS_PERFORMANCE_HACK
-	uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	volatile uint32_t *addr;
 
-	for (; count; count--) {
-		__asm("| avoid optim. _bus_space_set_region_4" : : : "memory");
-		*addr++ = value;
-	}
-#else
-	volatile uint32_t *addr = (void *) __X68K_BUS_ADDR(t, bsh, offset);
+	addr = (volatile uint32_t *)__X68K_BUS_ADDR(t, bsh, offset);
 
-	while (count-- > 0) {
+	for (; count; count--)
 		*addr++ = value;
-	}
-#endif
 }
 
 static __inline void

Reply via email to