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