#include <e-lib.h>
#include "../shared.h"
+#include <stdint.h>
#include <string.h>
#include "lb.h"
/* shared memory overlay */
volatile shm_t shm SECTION(".shared_dram");
-/* local block */
-d2q9_block_t block SECTION(".data_bank2");
+/* statically allocate dummy memory
+ to prevent linker from putting stuff there */
+uint8_t dummy_bank1[8192] SECTION(".data_bank1");
+uint8_t dummy_bank2[8192] SECTION(".data_bank2");
+uint8_t dummy_bank3[8192] SECTION(".data_bank3");
+
+/* local block, aliased over dummy_bankX */
+d2q9_block_t *block = (void*)0x2000;
void delay(void)
{
const FLOAT omega = 1.0;
- init_block(block);
+ init_block(*block);
while(1) {
#if 0
/* collide all nodes */
for(int x = 0; x < BLOCK_X; x++)
for(int y = 0; y < BLOCK_Y; y++)
- collide_and_swap(block, x, y, omega);
+ collide_and_swap(*block, x, y, omega);
/* XXX synchronize */
/* stream all nodes */
for(int x = 0; x < BLOCK_X; x++)
for(int y = 0; y < BLOCK_Y; y++)
- stream_node(block, x, y);
+ stream_node(*block, x, y);
/* XXX synchronize */
#else
/* collide boundaries: top, bottom */
for(int x = 0; x < BLOCK_X; x++) {
- collide_and_swap(block, x, 0, omega);
- collide_and_swap(block, x, BLOCK_Y-1, omega);
+ collide_and_swap(*block, x, 0, omega);
+ collide_and_swap(*block, x, BLOCK_Y-1, omega);
}
/* collide boundaries: left, right */
for(int y = 1; y < BLOCK_Y-1; y++) {
- collide_and_swap(block, 0, y, omega);
- collide_and_swap(block, BLOCK_X-1, y, omega);
+ collide_and_swap(*block, 0, y, omega);
+ collide_and_swap(*block, BLOCK_X-1, y, omega);
}
/* XXX synchronize */
/* collide and stream the bulk */
- collide_and_stream_bulk(block, omega);
+ collide_and_stream_bulk(*block, omega);
/* stream the boundaries: left, right */
for(int x = 0; x < BLOCK_X; x++) {
- stream_node(block, x, 0 );
- stream_node(block, x, BLOCK_Y-1);
+ stream_node(*block, x, 0 );
+ stream_node(*block, x, BLOCK_Y-1);
}
/* stream the boundaries: left, right */
for(int y = 1; y < BLOCK_Y-1; y++) {
- stream_node(block, 0, y);
- stream_node(block, BLOCK_X-1, y);
+ stream_node(*block, 0, y);
+ stream_node(*block, BLOCK_X-1, y);
}
/* XXX synchronize */
/* copy grid to shm */
- memcpy(&shm.lattice[0], &block, sizeof(d2q9_block_t));
+ memcpy(&shm.lattice[0], block, sizeof(d2q9_block_t));
/* flag host */
shm.states[0]++;