binutils-gdb/sim/testsuite/bfin/PN_generator.s
Mike Frysinger 1368b914e9 sim: testsuite: flatten tree
Now that all port tests live under testsuite/sim/*/, and none live
in testsuite/ directly, flatten the structure by moving all of the
dirs under testsuite/sim/ to testsuite/ directly.

We need to stop passing --tool to dejagnu so that it searches all
dirs and not just ones that start with "sim".  Since we have no
other dirs in this tree, and no plans to add any, should be fine.
2021-01-15 19:18:34 -05:00

79 lines
2.0 KiB
ArmAsm

# mach: bfin
// GENERIC PN SEQUENCE GENERATOR
// Linear Feedback Shift Register
// -------------------------------
// This solution implements an LFSR by applying an XOR reduction
// function to the 40 bit accumulator, XORing the contents of the
// CC bit, shifting by one the accumulator, and inserting the
// resulting bit on the open bit slot.
// CC --> ----- XOR--------------------------
// | | | | | |
// | | | | | |
// +------------------------------+ v
// | b0 b1 b2 b3 b38 b39 | in <-- by one
// +------------------------------+
// after:
// +------------------------------+
// | b1 b2 b3 b38 b39 in |
// +------------------------------+
// The program shown here is a PN sequence generator, and hence
// does not take any input other than the initial state. However,
// in order to accept an input, one simply needs to rotate the
// input sequence via CC prior to applying the XOR reduction.
.include "testutils.inc"
start
loadsym P1, output;
init_r_regs 0;
ASTAT = R0;
// load Polynomial into A1
A1 = A0 = 0;
R0.L = 0x1cd4;
R0.H = 0xab18;
A1.w = R0;
R0.L = 0x008d;
A1.x = R0.L;
// load InitState into A0
R0.L = 0x0001;
R0.H = 0x0000;
A0.w = R0;
R0.L = 0x0000;
A0.x = R0.L;
P4 = 4;
LSETUP ( l$0 , l$0end ) LC0 = P4;
l$0: // **** START l-LOOP *****
P4 = 32;
LSETUP ( m$1 , m$1 ) LC1 = P4; // **** START m-LOOP *****
m$1:
A0 = BXORSHIFT( A0 , A1, CC );
// store 16 bits of outdata RL1
R1 = A0.w;
l$0end:
[ P1 ++ ] = R1;
// Check results
loadsym I2, output;
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x5adf );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x2fc9 );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0xbd91 );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x5520 );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x80d5 );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x7fef );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x34d1 );
R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x915c );
pass
.data;
output:
.dw 0x0000
.dw 0x0000
.dw 0x0000
.dw 0x0000