OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/or1ksim
    from Rev 101 to Rev 104
    Reverse comparison

Rev 101 → Rev 104

/cpu/or32/or32.c
319,8 → 319,8
0, it_load},
{"l.lwz", "rD,I(rA)", "10 0x1 DDDDD AAAAA IIII IIII IIII IIII",
EF (l_lwz), 0, it_load},
{"l.lws", "rD,I(rA)", "10 0x2 DDDDD AAAAA IIII IIII IIII IIII", EFI,
0, it_load},
{"l.lws", "rD,I(rA)", "10 0x2 DDDDD AAAAA IIII IIII IIII IIII",
EF (l_lws), 0, it_load},
{"l.lbz", "rD,I(rA)", "10 0x3 DDDDD AAAAA IIII IIII IIII IIII",
EF (l_lbz), 0, it_load},
{"l.lbs", "rD,I(rA)", "10 0x4 DDDDD AAAAA IIII IIII IIII IIII",
/cpu/or32/insnset.c
107,6 → 107,15
sbuf_store (t - old_cyc);
}
}
INSTRUCTION (l_lws) {
uint32_t val;
if (config.cpu.sbuf_len) sbuf_load ();
val = eval_mem32(PARAM1, &breakpoint);
/* If eval operand produced exception don't set anything. JPB changed to
trigger on breakpoint, as well as except_pending (seemed to be a bug). */
if (!(except_pending || breakpoint))
SET_PARAM0(val);
}
INSTRUCTION (l_lwz) {
uint32_t val;
if (config.cpu.sbuf_len) sbuf_load ();
577,8 → 586,8
INSTRUCTION (lf_madd_s) {
if (config.cpu.hardfloat) {
FLOAT param0,param1, param2;
param0.hval = PARAM0;
param1.hval = PARAM1;
param0.hval = (uorreg_t)PARAM0;
param1.hval = (uorreg_t)PARAM1;
param2.hval = PARAM2;
param0.fval += param1.fval * param2.fval;
SET_PARAM0(param0.hval);
598,7 → 607,7
FLOAT param0, param1, param2;
param1.hval = PARAM1;
param2.hval = PARAM2;
param0.fval = param1.fval / param2.fval;
param0.fval = fmodf (param1.fval, param2.fval);
SET_PARAM0(param0.hval);
} else l_invalid();
}
692,9 → 701,3
}
INSTRUCTION (lf_cust1) {
}
INSTRUCTION (lf_cust2) {
}
INSTRUCTION (lf_cust3) {
}
INSTRUCTION (lf_cust4) {
}
/cpu/or32/generate.c
314,6 → 314,7
 
fprintf (fo, "/* This file was automatically generated by generate (see\n");
fprintf (fo, " cpu/or32/generate.c) */\n\n");
fprintf (fo, "#include <math.h>\n\n");
fprintf (fo, "typedef union {\n\tfloat fval;\n\tuint32_t hval;\n} FLOAT;\n\n");
fprintf (fo, "static void decode_execute (struct iqueue_entry *current)\n{\n");
fprintf (fo, " uint32_t insn = current->insn;\n");
/configure.ac
28,7 → 28,7
 
# Use a full version number (x.y.z, possibly with "rcn" as a suffix) when
# preparing a release, otherwise use a the date version (yyyy-mm-dd).
AC_INIT([or1ksim], [2010-05-25], [openrisc@opencores.org])
AC_INIT([or1ksim], [0.4.0rc1], [openrisc@opencores.org])
AC_CONFIG_MACRO_DIR([m4])
 
# Generically use extensions such as _GNU_SOURCE if available.
/doc/or1ksim.info
1,7 → 1,5
This is
/home/jules/Documents/openrisc_svn/openrisc/trunk/or1ksim/doc/or1ksim.info,
produced by makeinfo version 4.13 from
/home/jules/Documents/openrisc_svn/openrisc/trunk/or1ksim/doc/or1ksim.texi.
This is ../../doc/or1ksim.info, produced by makeinfo version 4.13 from
../../doc/or1ksim.texi.
 
INFO-DIR-SECTION Embedded development
START-INFO-DIR-ENTRY
66,7 → 64,7
Unpack the software and create a _separate_ directory in which to build
it:
 
tar jxf or1ksim-2010-05-20.tar.bz2
tar jxf or1ksim-0.4.0rc1.tar.bz2
mkdir builddir_or1ksim
cd builddir_or1ksim
 
83,7 → 81,7
OpenRISC 1000 32-bit architecture. If this argument is omitted, it will
default to OpenRISC 1000 32-bit with a warning
 
../or1ksim-2010-05-20/configure --target=or32-uclinux ...
../or1ksim-0.4.0rc1/configure --target=or32-uclinux ...
 
There are several other options available, many of which are standard
to GNU `configure' scripts. Use `configure --help' to see all the
90,9 → 88,14
options. The most useful is `--prefix' to specify a directory for
installation of the tools.
 
A number of Or1ksim features in the simulator do require enabling at
configuration. These include
For testing (using `make check'), the `--target' parameter _must_ be
specified, to allow the target tool chain to be selected. If the tools
have been installed using the standard OpenRISC script, then this
should be set to `or32-elf'.
 
A number of Or1ksim specific features in the simulator do require
enabling at configuration. These include
 
`--enable-profiling'
`--disable-profiling'
If enabled, Or1ksim is compiled for profiling with `gprof'. This
245,9 → 248,9
=============================
 
The following problems and issues are known about with Or1ksim
2010-05-20. The OpenRISC tracker may be used to see the current state
of these issues and to raise new problems and feature requests. It may
be found at `http://www.opencores.org/ptracker.cgi/view/or1k/398'.
0.4.0rc1. The OpenRISC tracker may be used to see the current state of
these issues and to raise new problems and feature requests. It may be
found at `http://www.opencores.org/ptracker.cgi/view/or1k/398'.
 
* The Supervision Register Little Endian Enable (LEE) bit is
ignored. Or1ksim can be built for either little endian or big
280,11 → 283,27
original design, and can only be fixed by a complete rewrite. The
entire source code uses static global constants liberally!
 
* There is no support for floating point instructions currently in
Or1ksim. However this is a work in progress and should be
available in the future.
* There is no support for single precision floating point
instructions in Or1ksim if configured in the CPU (*note CPU
Configuration: CPU Configuration.). These are implemented using
the floating point support in the host C library, which will
usually be IEEE 745 compliant. There is at present no support for
double precision floating point instructions, since these are
meaningless with 32-bit registers.
 
Floating point support within OpenRISC is intended to follow IEEE
745, which offers a degree of configurability. However at present
the FPSCR register is not supported, so there is no mechanism for
configuring floating point behavior. Thus the default
functionality of the host C library will be used.
 
* The single precision floating point multiply and add instruction,
`lf.madd.s', is not clearly specified in the original architectural
manual. User should consult the `OpenRISC 1200 version 2
Supplementary Programmer's Reference Manual' for a specification
of the functionality implemented.
 
 

File: or1ksim.info, Node: Usage, Next: Configuration, Prev: Installation, Up: Top
 
594,6 → 613,42
Interrupt Configuration.).
 
 
-- `or1ksim.h': double or1ksim_jtag_reset ()
Drive a reset sequence through the JTAG interface. Return the
(model) time taken for this action. Remember that the JTAG has
its own clock, which can be an order of magnitude slower than the
main clock, so even a reset (5 JTAG cycles) could take 50
processor clock cycles to complete.
 
 
-- `or1ksim.h': double or1ksim_jtag_shift_ir (unsigned
char *JREG, int NUM_BITS)
 
Shift the supplied register through the JTAG instruction register.
Return the (model) time taken for this action. The register is
supplied as a byte vector, with the least significant bits in the
least significant byte. If the total number of bits is not an
exact number of bytes, then the odd bits are found in the least
significant end of the highest numbered byte.
 
For example a 12-bit register would have bits 0-7 in byte 0 and
bits 11-8 in the least significant 4 bits of byte 1.
 
 
-- `or1ksim.h': double or1ksim_jtag_shift_dr (unsigned
char *JREG, int NUM_BITS)
 
Shift the supplied register through the JTAG data register.
Return the (model) time taken for this action. The register is
supplied as a byte vector, with the least significant bits in the
least significant byte. If the total number of bits is not an
exact number of bytes, then the odd bits are found in the least
significant end of the highest numbered byte.
 
For example a 12-bit register would have bits 0-7 in byte 0 and
bits 11-8 in the least significant 4 bits of byte 1.
 
 
The libraries will be installed in the `lib' sub-directory of the main
installation directory (as specified with the `--prefix' option to the
`configure' script).
1096,6 → 1151,7
`hardfloat = 0|1'
If 1, hardfloat instructions are enabled. Default value 0.
 
 

File: or1ksim.info, Node: Memory Configuration, Next: Memory Management Configuration, Prev: CPU Configuration, Up: Core OpenRISC Configuration
 
2613,6 → 2669,7
* Global Data Structures::
* Concepts::
* Internal Debugging::
* Regression Testing::
 

File: or1ksim.info, Node: Coding Conventions, Next: Global Data Structures, Up: Code Internals
2821,7 → 2878,7
 
 

File: or1ksim.info, Node: Internal Debugging, Prev: Concepts, Up: Code Internals
File: or1ksim.info, Node: Internal Debugging, Next: Regression Testing, Prev: Concepts, Up: Code Internals
 
6.4 Internal Debugging
======================
2834,6 → 2891,97
Redirection: Output Redirection.).
 

File: or1ksim.info, Node: Regression Testing, Prev: Internal Debugging, Up: Code Internals
 
6.5 Regression Testing
======================
 
Or1ksim now includes a regression test suite for both standalone and
library usage as described earlier (*note Building and Installing:
Build and Install.). Running the tests requires that the OpenRISC
toolchain and DejaGNU are both installed.
 
Tests are written using `expect', a derivative of TCL. Documentation
of DejaGnu, `expect' and TCL are freely available on the Web. The
Embecosm Application Note 8, `Howto: Using DejaGnu for Testing: A
Simple Introduction' (`http://www.embecosm.com/download/ean8.html')
provides a concise introduction.
 
All test code is found in the `testsuite' directory. The key files and
directories used are as follows.
 
`global-conf.exp'
This is the global DejaGNU configuration file used to set up
parameters common to all tests. If the user has the environment
varialbe `DEJAGNU' defined, it will be used instead, but this is
not recommended.
 
`Makefile.am'
This is the top level `automake' file for the testsuite. The only
changes likely to be needed here is additional local cleanup of
files created by new tests.
 
`README'
This contains details of all the tests
 
`config'
This contains DejaGnu board configurations. Since the tests are
generally run on a Unix host, this should just contain `Unix.exp'.
 
`lib'
This contains DejaGnu tool specific configurations. "Tool" has a
specific meaning in DejaGNU, referring just to a grouping of
tests. In this case there are two such "tools", "or1ksim" and
"libsim" for tests of the standalone tool and tests of the library.
 
Corresponding to this, there are two tool specific configuration
files, `or1ksim.exp' and `libsim.exp'. These contain `expect'/TCL
procedures for common use among the tests.
 
`libsim.tests'
`or1ksim.tests'
These are the directories of tests of the Or1ksim library. They
also include Or1ksim configuration files and each has a
`Makefile.am' file. `Makefile.am' should be updated whenever
files are added to this directory, to ensure they are included in
the distribution.
 
`test-code'
These are all the test programs to be compiled on the host (each
in its own directory). In general these are programs to support
testing of the library, and build various programs linking in the
library.
 
`test-code'
These are all the test programs to be compiled with the OpenRISC
tool chain to run with either standalone Or1ksim or the library.
This directory includes its own `configure.ac', since it must set
up a separate tool chain based on the target, not the host.
 
 
To add a new test needs the following steps.
 
* Put new host C code in its own directory within `test-code'. Add
the directory to the existing `Makefile.am' in the `test-code'
directory and create a `Makefile.am' in the new directory to drive
building the test program(s). Don't forget to add the new
`Makefile' to the top level `configure.ac' so it gets generated.
Not all tests require code here.
 
* Put new target C code in its own directory within
`test-code-or1k'. Once again modify & create `Makefile.am'. this
time though modify the `configure.ac' in the `test-code-or1k' so
the `Makefile' gets generated. The existing programs provide
examples to start from, including custom linker scripts where
needed.
 
* Add one or more tests and configuration files to the relevant
"tool" test directory. Use the existing tests as templates. They
make heavy use of the `expect'/TCL procedures in the `config'
directory to facilitate driving the tests.
 
 

File: or1ksim.info, Node: GNU Free Documentation License, Next: Index, Prev: Code Internals, Up: Top
 
7 GNU Free Documentation License
3278,39 → 3426,39
* --debug-config: Standalone Simulator.
(line 48)
* --disable-all-tests: Configuring the Build.
(line 128)
(line 133)
* --disable-arith-flag: Configuring the Build.
(line 93)
(line 98)
* --disable-debug: Configuring the Build.
(line 121)
(line 126)
* --disable-ethphy: Configuring the Build.
(line 54)
(line 59)
* --disable-ov-flag: Configuring the Build.
(line 70)
(line 75)
* --disable-profiling: Configuring the Build.
(line 25)
(line 30)
* --disable-range-stats: Configuring the Build.
(line 64)
(line 69)
* --enable-all-tests: Configuring the Build.
(line 127)
(line 132)
* --enable-arith-flag: Configuring the Build.
(line 92)
(line 97)
* --enable-debug: Configuring the Build.
(line 120)
(line 125)
* --enable-ethphy: Configuring the Build.
(line 53)
(line 58)
* --enable-execution: Configuring the Build.
(line 32)
(line 37)
* --enable-mprofile: Standalone Simulator.
(line 77)
* --enable-ov-flag: Configuring the Build.
(line 69)
(line 74)
* --enable-profile: Standalone Simulator.
(line 74)
* --enable-profiling: Configuring the Build.
(line 24)
(line 29)
* --enable-range-stats: Configuring the Build.
(line 63)
(line 68)
* --file: Standalone Simulator.
(line 24)
* --filename: Memory Profiling Utility.
3376,9 → 3524,9
(line 66)
* 16550 (UART configuration): UART Configuration. (line 73)
* all tests enabled: Configuring the Build.
(line 128)
(line 133)
* Argtable2 debugging: Configuring the Build.
(line 121)
(line 126)
* ATA/ATAPI configuration: Disc Interface Configuration.
(line 6)
* ATA/ATAPI device configuration: Disc Interface Configuration.
3435,7 → 3583,7
* command line for Or1ksim standalone use: Standalone Simulator.
(line 6)
* complex model: Configuring the Build.
(line 32)
(line 37)
* config: Global Data Structures.
(line 7)
* config.bpb: Global Data Structures.
3531,7 → 3679,11
(line 6)
* Debug Unit verification (VAPI): Verification API. (line 34)
* debugging enabled (Argtable2): Configuring the Build.
(line 121)
(line 126)
* DejaGnu board configurations: Regression Testing. (line 35)
* DejaGnu configuration: Regression Testing. (line 21)
* DejaGNU tests directories: Regression Testing. (line 50)
* DejaGnu tool specific configuration: Regression Testing. (line 39)
* delayr (memory configuration): Memory Configuration.
(line 137)
* delayw (memory configuration): Memory Configuration.
3574,7 → 3726,7
* dynamic clock gating (power management register): Power Management Configuration.
(line 21)
* dynamic model: Configuring the Build.
(line 32)
(line 37)
* dynamic ports, use of: Verification API Configuration.
(line 23)
* edge_trigger (interrupt controller): Interrupt Configuration.
3611,7 → 3763,7
* enabled (VGA configuration): Display Interface Configuration.
(line 22)
* enabling Ethernet via socket: Configuring the Build.
(line 54)
(line 59)
* entrysize (MMU configuration): Memory Management Configuration.
(line 32)
* ETH_VAPI_CTRL (Ethernet verification): Verification API. (line 86)
3620,7 → 3772,7
(line 6)
* Ethernet verification (VAPI): Verification API. (line 78)
* Ethernet via socket, enabling: Configuring the Build.
(line 54)
(line 59)
* exe_log (simulator configuration): Simulator Behavior. (line 49)
* exe_log_end (simulator configuration): Simulator Behavior. (line 89)
* exe_log_file (simulator configuration): Simulator Behavior. (line 97)
3654,7 → 3806,9
* firmware (ATA/ATAPI device configuration): Disc Interface Configuration.
(line 117)
* flag setting by instructions: Configuring the Build.
(line 93)
(line 98)
* floating point multiply and add: Known Issues. (line 56)
* floating point support: Known Issues. (line 42)
* frame buffer configuration: Frame Buffer Configuration.
(line 6)
* gdb_enabled (debug interface configuration): Debug Interface Configuration.
3691,6 → 3845,7
(line 38)
* hitdelay (MMU configuration): Memory Management Configuration.
(line 51)
* host test code: Regression Testing. (line 57)
* hw_enabled (generic peripheral configuration): Generic Peripheral Configuration.
(line 49)
* IMMU configuration: Memory Management Configuration.
3721,6 → 3876,7
* jitter (UART configuration): UART Configuration. (line 78)
* keyboard configuration: Keyboard Configuration.
(line 6)
* lf.madd.s: Known Issues. (line 56)
* library version of Or1ksim: Simulator Library. (line 6)
* license for Or1ksim: GNU Free Documentation License.
(line 6)
3735,6 → 3891,7
* log_enabled (verification API configuration): Verification API Configuration.
(line 28)
* long: Simulator Library. (line 87)
* make file for tests: Regression Testing. (line 27)
* mc (memory configuration): Memory Configuration.
(line 126)
* memory configuration: Memory Configuration.
3797,12 → 3954,15
* or1ksim_interrupt_clear: Simulator Library. (line 110)
* or1ksim_interrupt_set: Simulator Library. (line 101)
* or1ksim_is_le: Simulator Library. (line 82)
* or1ksim_jtag_reset: Simulator Library. (line 119)
* or1ksim_jtag_shift_dr: Simulator Library. (line 141)
* or1ksim_jtag_shift_ir: Simulator Library. (line 127)
* or1ksim_reset_duration: Simulator Library. (line 62)
* or1ksim_run: Simulator Library. (line 57)
* or1ksim_set_time_point: Simulator Library. (line 73)
* output rediretion: Concepts. (line 7)
* overflow flag setting by instructions: Configuring the Build.
(line 70)
(line 75)
* packet (ATA/ATAPI device configuration): Disc Interface Configuration.
(line 113)
* pagesize (MMU configuration): Memory Management Configuration.
3897,9 → 4057,10
* register display (Interactive CLI): Interactive Command Line.
(line 14)
* register over time statistics: Configuring the Build.
(line 64)
(line 69)
* register patching (Interactive CLI): Interactive Command Line.
(line 28)
* regression testing: Regression Testing. (line 6)
* Remote Serial Protocol: Debug Interface Configuration.
(line 20)
* reset (Interactive CLI): Interactive Command Line.
3996,7 → 4157,7
* setdbch (Interactive CLI): Interactive Command Line.
(line 141)
* simple model: Configuring the Build.
(line 32)
(line 37)
* simulator configuration: Simulator Behavior. (line 6)
* simulator configuration info (Interactive CLI): Interactive Command Line.
(line 119)
4024,7 → 4185,7
* stall the processor (Interactive CLI): Interactive Command Line.
(line 72)
* statistics, register over time: Configuring the Build.
(line 64)
(line 69)
* statistics, simulation (Interactive CLI): Interactive Command Line.
(line 83)
* stats (Interactive CLI): Interactive Command Line.
4042,6 → 4203,7
(line 24)
* t (Interactive CLI): Interactive Command Line.
(line 19)
* target test code: Regression Testing. (line 63)
* TCP/IP port range: Verification API Configuration.
(line 23)
* TCP/IP port range for or1ksim service: Debug Interface Configuration.
4048,8 → 4210,13
(line 74)
* TCP/IP port range for or1ksim-rsp service: Debug Interface Configuration.
(line 41)
* test code for host: Regression Testing. (line 57)
* test code for target: Regression Testing. (line 63)
* test make file: Regression Testing. (line 27)
* test README: Regression Testing. (line 32)
* testing: Regression Testing. (line 6)
* tests, all enabled.: Configuring the Build.
(line 128)
(line 133)
* timings_file (CUC configuration): CUC Configuration. (line 46)
* timings_fn (CUC configuration - deprecated): CUC Configuration.
(line 46)
4127,54 → 4294,55
 

Tag Table:
Node: Top918
Node: Installation1328
Node: Preparation1575
Node: Configuring the Build1870
Node: Build and Install7349
Node: Known Issues8195
Node: Usage10336
Node: Standalone Simulator10550
Node: Profiling Utility13453
Node: Memory Profiling Utility14363
Node: Simulator Library15728
Node: Configuration21920
Node: Configuration File Format22529
Node: Configuration File Preprocessing22821
Node: Configuration File Syntax23192
Node: Simulator Configuration25977
Node: Simulator Behavior26268
Node: Verification API Configuration30312
Node: CUC Configuration32252
Node: Core OpenRISC Configuration34169
Node: CPU Configuration34671
Node: Memory Configuration38788
Node: Memory Management Configuration45246
Node: Cache Configuration47623
Node: Interrupt Configuration50009
Node: Power Management Configuration50745
Node: Branch Prediction Configuration52022
Node: Debug Interface Configuration53382
Node: Peripheral Configuration57602
Node: Memory Controller Configuration58228
Node: UART Configuration61642
Node: DMA Configuration65161
Node: Ethernet Configuration67028
Node: GPIO Configuration71004
Node: Display Interface Configuration72637
Node: Frame Buffer Configuration74946
Node: Keyboard Configuration76810
Node: Disc Interface Configuration79048
Node: Generic Peripheral Configuration83991
Node: Interactive Command Line86286
Node: Verification API93260
Node: Code Internals97690
Node: Coding Conventions98250
Node: Global Data Structures102677
Node: Concepts105334
Ref: Output Redirection105479
Node: Internal Debugging106018
Node: GNU Free Documentation License106515
Node: Index128922
Node: Top814
Node: Installation1224
Node: Preparation1471
Node: Configuring the Build1764
Node: Build and Install7486
Node: Known Issues8332
Node: Usage11392
Node: Standalone Simulator11606
Node: Profiling Utility14509
Node: Memory Profiling Utility15419
Node: Simulator Library16784
Node: Configuration24562
Node: Configuration File Format25171
Node: Configuration File Preprocessing25463
Node: Configuration File Syntax25834
Node: Simulator Configuration28619
Node: Simulator Behavior28910
Node: Verification API Configuration32954
Node: CUC Configuration34894
Node: Core OpenRISC Configuration36811
Node: CPU Configuration37313
Node: Memory Configuration41431
Node: Memory Management Configuration47889
Node: Cache Configuration50266
Node: Interrupt Configuration52652
Node: Power Management Configuration53388
Node: Branch Prediction Configuration54665
Node: Debug Interface Configuration56025
Node: Peripheral Configuration60245
Node: Memory Controller Configuration60871
Node: UART Configuration64285
Node: DMA Configuration67804
Node: Ethernet Configuration69671
Node: GPIO Configuration73647
Node: Display Interface Configuration75280
Node: Frame Buffer Configuration77589
Node: Keyboard Configuration79453
Node: Disc Interface Configuration81691
Node: Generic Peripheral Configuration86634
Node: Interactive Command Line88929
Node: Verification API95903
Node: Code Internals100333
Node: Coding Conventions100916
Node: Global Data Structures105343
Node: Concepts108000
Ref: Output Redirection108145
Node: Internal Debugging108684
Node: Regression Testing109208
Node: GNU Free Documentation License113003
Node: Index135410

End Tag Table
/doc/or1ksim.texi
110,9 → 110,14
all the options. The most useful is @code{--prefix} to specify a
directory for installation of the tools.
 
A number of @value{OR1KSIM} features in the simulator do require enabling at
configuration. These include
For testing (using @command{make check}), the @code{--target} parameter
@emph{must} be specified, to allow the target tool chain to be
selected. If the tools have been installed using the standard OpenRISC
script, then this should be set to @code{or32-elf}.
 
A number of @value{OR1KSIM} specific features in the simulator do
require enabling at configuration. These include
 
@table @code
@item --enable-profiling
@cindex @code{--enable-profiling}
343,10 → 348,29
code uses static global constants liberally!
 
@item
There is no support for floating point instructions currently in
@value{OR1KSIM}. However this is a work in progress and should be available in
the future.
@cindex floating point support
There is no support for single precision floating point instructions in
@value{OR1KSIM} if configured in the CPU (@pxref{CPU Configuration, ,
CPU Configuration}). These are implemented using the floating point
support in the host C library, which will usually be IEEE 745 compliant.
There is at present no support for double precision floating point
instructions, since these are meaningless with 32-bit registers.
 
Floating point support within OpenRISC is intended to follow IEEE 745,
which offers a degree of configurability. However at present the FPSCR
register is not supported, so there is no mechanism for configuring
floating point behavior. Thus the default functionality of the host C
library will be used.
 
@item
@cindex floating point multiply and add
@cindex lf.madd.s
The single precision floating point multiply and add instruction,
@code{lf.madd.s}, is not clearly specified in the original architectural
manual. User should consult the @cite{OpenRISC 1200 version 2
Supplementary Programmer's Reference Manual} for a specification of the
functionality implemented.
 
@end itemize
 
@node Usage
725,6 → 749,45
 
@end deftypefn
 
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_reset ()
 
Drive a reset sequence through the JTAG interface. Return the (model)
time taken for this action. Remember that the JTAG has its own clock,
which can be an order of magnitude slower than the main clock, so even a
reset (5 JTAG cycles) could take 50 processor clock cycles to complete.
 
@end deftypefn
 
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_shift_ir (unsigned
char *@var{jreg}, int @var{num_bits})
 
Shift the supplied register through the JTAG instruction
register. Return the (model) time taken for this action. The register is
supplied as a byte vector, with the least significant bits in the least
significant byte. If the total number of bits is not an exact number of
bytes, then the odd bits are found in the least significant end of the
highest numbered byte.
 
For example a 12-bit register would have bits 0-7 in byte 0 and bits
11-8 in the least significant 4 bits of byte 1.
 
@end deftypefn
 
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_shift_dr (unsigned
char *@var{jreg}, int @var{num_bits})
 
Shift the supplied register through the JTAG data register. Return the
(model) time taken for this action. The register is supplied as a byte
vector, with the least significant bits in the least significant byte.
If the total number of bits is not an exact number of bytes, then the
odd bits are found in the least significant end of the highest numbered
byte.
 
For example a 12-bit register would have bits 0-7 in byte 0 and bits
11-8 in the least significant 4 bits of byte 1.
 
@end deftypefn
 
The libraries will be installed in the @file{lib} sub-directory of the
main installation directory (as specified with the @option{--prefix}
option to the @command{configure} script).
3218,6 → 3281,7
* Global Data Structures::
* Concepts::
* Internal Debugging::
* Regression Testing::
@end menu
 
@node Coding Conventions
3485,6 → 3549,113
arguments are printed to the current output stream (@pxref{Output
Redirection, , Output Redirection}).
 
@node Regression Testing
@section Regression Testing
@cindex regression testing
@cindex testing
@value{OR1KSIM} now includes a regression test suite for both standalone
and library usage as described earlier (@pxref{Build and Install,
, Building and Installing}). Running the tests requires that the
OpenRISC toolchain and DejaGNU are both installed.
 
Tests are written using @command{expect}, a derivative of TCL.
Documentation of DejaGnu, @command{expect} and TCL are freely available
on the Web. The Embecosm Application Note 8, @cite{Howto: Using DejaGnu
for Testing: A Simple Introduction}
(@uref{http://www.embecosm.com/download/ean8.html}) provides a concise
introduction.
 
All test code is found in the @file{testsuite} directory. The key
files and directories used are as follows.
 
@table @code
@item global-conf.exp
@cindex DejaGnu configuration
This is the global DejaGNU configuration file used to set up parameters
common to all tests. If the user has the environment varialbe
@env{DEJAGNU} defined, it will be used instead, but this is not
recommended.
 
@item Makefile.am
@cindex test make file
@cindex make file for tests
This is the top level @command{automake} file for the testsuite. The
only changes likely to be needed here is additional local cleanup of
files created by new tests.
 
@item README
@cindex test README
This contains details of all the tests
 
@item config
@cindex DejaGnu board configurations
This contains DejaGnu board configurations. Since the tests are
generally run on a Unix host, this should just contain @file{Unix.exp}.
 
@item lib
@cindex DejaGnu tool specific configuration
This contains DejaGnu tool specific configurations. ``Tool'' has a
specific meaning in DejaGNU, referring just to a grouping of tests. In
this case there are two such ``tools'', ``or1ksim'' and ``libsim''
for tests of the standalone tool and tests of the library.
 
Corresponding to this, there are two tool specific configuration files,
@file{or1ksim.exp} and @file{libsim.exp}. These contain @command{expect}/TCL
procedures for common use among the tests.
 
@item libsim.tests
@itemx or1ksim.tests
@cindex DejaGNU tests directories
These are the directories of tests of the Or1ksim library. They also include
@value{OR1KSIM} configuration files and each has a @file{Makefile.am} file.
@file{Makefile.am} should be updated whenever files are added to this
directory, to ensure they are included in the distribution.
 
@item test-code
@cindex host test code
@cindex test code for host
These are all the test programs to be compiled on the host (each in its
own directory). In general these are programs to support testing of the
library, and build various programs linking in the library.
 
@item test-code
@cindex target test code
@cindex test code for target
These are all the test programs to be compiled with the OpenRISC tool
chain to run with either standalone @value{OR1KSIM} or the library. This
directory includes its own @file{configure.ac}, since it must set up a
separate tool chain based on the target, not the host.
 
@end table
 
To add a new test needs the following steps.
 
@itemize @bullet
 
@item
Put new host C code in its own directory within @file{test-code}. Add
the directory to the existing @file{Makefile.am} in the @file{test-code}
directory and create a @file{Makefile.am} in the new directory to
drive building the test program(s). Don't forget to add the new
@file{Makefile} to the top level @file{configure.ac} so it gets generated. Not
all tests require code here.
 
@item
Put new target C code in its own directory within
@file{test-code-or1k}. Once again modify & create
@file{Makefile.am}. this time though modify the @file{configure.ac} in
the @file{test-code-or1k} so the @file{Makefile} gets generated. The
existing programs provide examples to start from, including custom
linker scripts where needed.
 
@item
Add one or more tests and configuration files to the relevant ``tool''
test directory. Use the existing tests as templates. They make heavy use
of the @command{expect}/TCL procedures in the @file{config} directory to
facilitate driving the tests.
 
@end itemize
 
@node GNU Free Documentation License
@chapter GNU Free Documentation License
@cindex license for @value{OR1KSIM}
/doc/version.texi
1,4 → 1,4
@set UPDATED 25 May 2010
@set UPDATED-MONTH May 2010
@set EDITION 2010-05-20
@set VERSION 2010-05-20
@set UPDATED 2 June 2010
@set UPDATED-MONTH June 2010
@set EDITION 0.4.0rc1
@set VERSION 0.4.0rc1
/NEWS
2,8 → 2,8
==================================================
 
 
New in top of tree
==================
New in release 0.4.0rc1
=======================
 
The following new features are provided.
* testbench now renamed testsuite and fully integrated using DejaGNU.
10,10 → 10,13
"make check" now works correctly if the OpenRISC toolchain is installed.
* New configuration flag --enable-all-tests to enable building of incomplete
tests with "make check".
* The library offers an interface via modelled JTAG
* Single precision floating point is available.
 
The user guide is updated.
 
The following feature requests have been accepted.
* Feature 413: ORFPX32 single precision floating point now supported.
* Feature 469: Icache tags now intialized as invalid.
* Feature 1673: Or1ksim now builds on Mac OS X.
* Feature 1678: download, patch and build dirs removed from SVN.
27,11 → 30,15
* Bug 534: Test suite fixed (see above).
* Bug 1710: mprofile now handles mode args correctly.
* Bug 1723: PS2 keyboard error message clearer if RX file won't open.
* Bug 1773: Or1ksim now accepts ELF image when working through RSP.
* Bug 1733: Or1ksim now accepts ELF image when working through RSP.
* Bug 1767: l.lws is not recognized as an opcode.
 
The following bugs are either cannot be reproduced or will not be fixed.
 
The following bugs are outstanding
* Bug 1758: Memory controller issues. Workaround in the user guide.
 
 
New in release 0.3.0
====================
 
/ChangeLog
1,3 → 1,14
2010-06-01 Jeremy Bennett <jeremy.bennett@embecosm.com>
* cpu/or32/generate.c (generate_header): Include math.h.
* cpu/or32/insnset.c <lf_lws>: Added definition.
* cpu/or32/insnset.c <lf_rem_s>: Corrected implementation.
* cpu/or32/or32.c <or32_opcodes>: Made l.lws valid, rather than
ignored.
 
2010-05-31 Jeremy Bennett <jeremy.bennett@embecosm.com>
* cpu/or32/insnset.c <lf_cust2, lf_cust3, lf_cust4>: Removed since
invalid.
 
2010-05-25 Julius Baxter <julius.baxter@orsoc.se>
* profiler.c: PROF_DEBUG added as symbol, MAX_STACK increased.
(prof_acquire): Conditional debugging statements added.
/testsuite/test-code-or1k/configure
12684,7 → 12684,7
_ACEOF
 
 
ac_config_files="$ac_config_files Makefile acv-gpio/Makefile acv-uart/Makefile basic/Makefile cache/Makefile cbasic/Makefile cfg/Makefile dhry/Makefile dmatest/Makefile eth/Makefile except/Makefile except-test/Makefile exit/Makefile ext/Makefile fbtest/Makefile functest/Makefile flag/Makefile int-test/Makefile int-logger/Makefile inst-set-test/Makefile kbdtest/Makefile local-global/Makefile loop/Makefile mc-async/Makefile mc-dram/Makefile mc-ssram/Makefile mc-sync/Makefile mc-common/Makefile mem-test/Makefile mmu/Makefile mul/Makefile mycompress/Makefile support/Makefile tick/Makefile uos/Makefile upcalls/Makefile"
ac_config_files="$ac_config_files Makefile acv-gpio/Makefile acv-uart/Makefile basic/Makefile cache/Makefile cbasic/Makefile cfg/Makefile dhry/Makefile dmatest/Makefile eth/Makefile except/Makefile except-test/Makefile exit/Makefile ext/Makefile fbtest/Makefile fp/Makefile functest/Makefile flag/Makefile int-test/Makefile int-logger/Makefile inst-set-test/Makefile kbdtest/Makefile local-global/Makefile loop/Makefile lws-test/Makefile mc-async/Makefile mc-dram/Makefile mc-ssram/Makefile mc-sync/Makefile mc-common/Makefile mem-test/Makefile mmu/Makefile mul/Makefile mycompress/Makefile support/Makefile tick/Makefile uos/Makefile upcalls/Makefile"
 
 
cat >confcache <<\_ACEOF
13601,6 → 13601,7
"exit/Makefile") CONFIG_FILES="$CONFIG_FILES exit/Makefile" ;;
"ext/Makefile") CONFIG_FILES="$CONFIG_FILES ext/Makefile" ;;
"fbtest/Makefile") CONFIG_FILES="$CONFIG_FILES fbtest/Makefile" ;;
"fp/Makefile") CONFIG_FILES="$CONFIG_FILES fp/Makefile" ;;
"functest/Makefile") CONFIG_FILES="$CONFIG_FILES functest/Makefile" ;;
"flag/Makefile") CONFIG_FILES="$CONFIG_FILES flag/Makefile" ;;
"int-test/Makefile") CONFIG_FILES="$CONFIG_FILES int-test/Makefile" ;;
13609,6 → 13610,7
"kbdtest/Makefile") CONFIG_FILES="$CONFIG_FILES kbdtest/Makefile" ;;
"local-global/Makefile") CONFIG_FILES="$CONFIG_FILES local-global/Makefile" ;;
"loop/Makefile") CONFIG_FILES="$CONFIG_FILES loop/Makefile" ;;
"lws-test/Makefile") CONFIG_FILES="$CONFIG_FILES lws-test/Makefile" ;;
"mc-async/Makefile") CONFIG_FILES="$CONFIG_FILES mc-async/Makefile" ;;
"mc-dram/Makefile") CONFIG_FILES="$CONFIG_FILES mc-dram/Makefile" ;;
"mc-ssram/Makefile") CONFIG_FILES="$CONFIG_FILES mc-ssram/Makefile" ;;
/testsuite/test-code-or1k/Makefile.in
275,6 → 275,7
exit \
ext \
fbtest \
fp \
functest \
flag \
inst-set-test \
283,6 → 284,7
kbdtest \
local-global \
loop \
lws-test \
mc-async \
mc-dram \
mc-ssram \
/testsuite/test-code-or1k/lws-test/Makefile.in
0,0 → 1,504
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
 
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
 
@SET_MAKE@
 
# Makefile.am for or1ksim testsuite CPU test program: lws-test
 
# Copyright (C) Embecosm Limited, 2010
 
# Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
 
# This file is part of OpenRISC 1000 Architectural Simulator.
 
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option)
# any later version.
 
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
 
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http:#www.gnu.org/licenses/>. */
 
# -----------------------------------------------------------------------------
# This code is commented throughout for use with Doxygen.
# -----------------------------------------------------------------------------
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = lws-test$(EXEEXT)
subdir = lws-test
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am_lws_test_OBJECTS = lws-test.$(OBJEXT)
lws_test_OBJECTS = $(am_lws_test_OBJECTS)
lws_test_LDADD = $(LDADD)
lws_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lws_test_LDFLAGS) \
$(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/../../depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(lws_test_SOURCES)
DIST_SOURCES = $(lws_test_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASDEPMODE = @CCASDEPMODE@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SIM = @SIM@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
lws_test_SOURCES = lws-test.S
lws_test_LDFLAGS = -T$(srcdir)/../default.ld
all: all-am
 
.SUFFIXES:
.SUFFIXES: .S .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lws-test/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu lws-test/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
 
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
 
clean-checkPROGRAMS:
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
lws-test$(EXEEXT): $(lws_test_OBJECTS) $(lws_test_DEPENDENCIES)
@rm -f lws-test$(EXEEXT)
$(lws_test_LINK) $(lws_test_OBJECTS) $(lws_test_LDADD) $(LIBS)
 
mostlyclean-compile:
-rm -f *.$(OBJEXT)
 
distclean-compile:
-rm -f *.tab.c
 
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lws-test.Po@am__quote@
 
.S.o:
@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $<
 
.S.obj:
@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
.S.lo:
@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $<
 
mostlyclean-libtool:
-rm -f *.lo
 
clean-libtool:
-rm -rf .libs _libs
 
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
 
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
 
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
 
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
 
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
 
clean-generic:
 
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
 
clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
mostlyclean-am
 
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
 
dvi: dvi-am
 
dvi-am:
 
html: html-am
 
html-am:
 
info: info-am
 
info-am:
 
install-data-am:
 
install-dvi: install-dvi-am
 
install-dvi-am:
 
install-exec-am:
 
install-html: install-html-am
 
install-html-am:
 
install-info: install-info-am
 
install-info-am:
 
install-man:
 
install-pdf: install-pdf-am
 
install-pdf-am:
 
install-ps: install-ps-am
 
install-ps-am:
 
installcheck-am:
 
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
 
mostlyclean: mostlyclean-am
 
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
 
pdf: pdf-am
 
pdf-am:
 
ps: ps-am
 
ps-am:
 
uninstall-am:
 
.MAKE: check-am install-am install-strip
 
.PHONY: CTAGS GTAGS all all-am check check-am clean \
clean-checkPROGRAMS clean-generic clean-libtool ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
 
 
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
/testsuite/test-code-or1k/lws-test/lws-test.S
0,0 → 1,536
/* lws-test.S. l.lws instruction test of Or1ksim
 
Copyright (C) 1999-2006 OpenCores
Copyright (C) 2010 Embecosm Limited
 
Contributors various OpenCores participants
Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
 
This file is part of OpenRISC 1000 Architectural Simulator.
 
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
 
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
 
You should have received a copy of the GNU General Public License along
with this program. If not, see <http: www.gnu.org/licenses/>. */
 
 
/* ----------------------------------------------------------------------------
* Test coverage
*
* The l.lws instruction was omitted from Or1ksim originally. It is specified
* for ORBIS32, even though it is functionally equivalent to l.lwz.
*
* Having fixed the problem, this is (in good software engineering style), a
* regresison test to go with the fix.
*
* Of course what is really needed is a comprehensive instruction test...
* ------------------------------------------------------------------------- */
 
 
#include "spr-defs.h"
#include "board.h"
 
/* ----------------------------------------------------------------------------
* Coding conventions
*
* A simple rising stack is provided starting at _stack and pointed to by
* r1. r1 points to the next free word. Only 32-bit registers may be pushed
* onto the stack.
*
* Temporary labels up to 49 are reserved for macros and subroutines. Each is
* used only once in any macro or subroutine. You can get in a serious mess if
* you get local label clashing in macros.
*
* Arguments to functions are passed in r3 through r8.
* r9 is the link (return address)
* r11 is for returning results
* r2 through r11 are not preserved across calls. All other registers are.
* ------------------------------------------------------------------------- */
 
 
/* ----------------------------------------------------------------------------
* Memory controller constants
* ------------------------------------------------------------------------- */
 
#define MEM_RAM 0x00000000
 
#define MC_CSR (0x00)
#define MC_POC (0x04)
#define MC_BA_MASK (0x08)
#define MC_CSC(i) (0x10 + (i) * 8)
#define MC_TMS(i) (0x14 + (i) * 8)
 
/* ----------------------------------------------------------------------------
* Useful constants
* ------------------------------------------------------------------------- */
 
/* Indicator of completion */
#define ALL_DONE (0xdeaddead)
 
/* Logical values */
#define TRUE 1
#define FALSE 0
 
 
/* ----------------------------------------------------------------------------
* Macro to push a register onto the stack
*
* r1 points to the next free slot. Push the supplied register on, then
* advance the stack pointer.
*
* Arguments:
* reg The register to push
*
* Registers modified
* r1
* ------------------------------------------------------------------------- */
#define PUSH(reg) \
l.sw 0(r1),reg /* Push */ ;\
l.addi r1,r1,4 /* Advance the stack */
/* ----------------------------------------------------------------------------
* Macro to pop a register off the stack
*
* r1 points to the next free slot. Decrement the stack pointer, then pop the
* requested register.
*
* Arguments:
* reg The register to pop
*
* Registers modified
* r1
* ------------------------------------------------------------------------- */
#define POP(reg) \
l.addi r1,r1,-4 /* Decrement the stack */ ;\
l.lws reg,0(r1) /* Pop */
/* ----------------------------------------------------------------------------
* Macro to load a 32-bit constant into a register
*
* Arguments:
* reg The register to load
* val The value to load
*
* ------------------------------------------------------------------------- */
#define LOAD_CONST(reg,val) \
l.movhi reg,hi(val) ;\
l.ori reg,reg,lo(val)
/* ----------------------------------------------------------------------------
* Macro to define and load a pointer to a string
*
* Arguments:
* reg The register to load
* str The string
*
* ------------------------------------------------------------------------- */
#define LOAD_STR(reg,str) \
.section .rodata ;\
1: ;\
.string str ;\
;\
.section .text ;\
l.movhi reg,hi(1b) ;\
l.ori reg,reg,lo(1b)
/* ----------------------------------------------------------------------------
* Macro to print a character
*
* Arguments:
* c The character to print
* ------------------------------------------------------------------------- */
#define PUTC(c) \
l.addi r3,r0,c ;\
l.nop NOP_PUTC
/* ----------------------------------------------------------------------------
* Macro for recording the result of a test
*
* The test result is in r4. Print out the name of test indented two spaces,
* followed by ": ", either "OK" or "Failed" and a newline.
*
* Arguments:
* str Textual name of the test
* reg The result to test (not r2)
* val Desired result of the test
* ------------------------------------------------------------------------- */
#define CHECK_RES(str,reg,val) \
.section .rodata ;\
2: ;\
.string str ;\
;\
.section .text ;\
PUSH (reg) /* Save the register to test */ ;\
;\
LOAD_CONST (r3,2b) /* Print out the string */ ;\
l.jal _ptest ;\
l.nop ;\
;\
LOAD_CONST(r2,val) /* The desired result */ ;\
POP (reg) /* The register to test */ ;\
PUSH (reg) /* May need again later */ ;\
l.sfeq r2,reg /* Does the result match? */ ;\
l.bf 3f ;\
l.nop ;\
;\
l.jal _pfail /* Test failed */ ;\
l.nop ;\
POP (reg) /* Report the register */ ;\
l.add r3,r0,reg ;\
l.j 4f ;\
l.nop NOP_REPORT ;\
3: ;\
POP (reg) /* Discard the register */ ;\
l.jal _pok /* Test succeeded */ ;\
l.nop ;\
4:
/* ----------------------------------------------------------------------------
* Macro for recording the result of a comparison
*
* If the flag is set print the string argument indented by 2 spaces, followed
* by "TRUE" and a newline, otherwise print the string argument indented by
* two spaces, followed by "FALSE" and a newline.
*
* Arguments:
* str Textual name of the test
* res Expected result (TRUE or FALSE)
* ------------------------------------------------------------------------- */
#define CHECK_FLAG(str,res) \
.section .rodata ;\
5: ;\
.string str ;\
;\
.section .text ;\
l.bnf 7f /* Branch if result FALSE */ ;\
;\
/* Branch for TRUE result */ ;\
LOAD_CONST (r3,5b) /* The string to print */ ;\
l.jal _ptest ;\
l.nop ;\
;\
l.addi r2,r0,TRUE /* Was it expected? */ ;\
l.addi r3,r0,res ;\
l.sfeq r2,r3 ;\
l.bnf 6f /* Branch if not expected */ ;\
;\
/* Sub-branch for TRUE found and expected */ ;\
l.jal _ptrue ;\
l.nop ;\
PUTC ('\n') ;\
l.j 9f ;\
l.nop ;\
6: ;\
/* Sub-branch for TRUE found and not expected */ ;\
l.jal _ptrue ;\
l.nop ;\
l.jal _punexpected ;\
l.nop ;\
l.j 9f ;\
l.nop ;\
;\
7: ;\
/* Branch for FALSE result */ ;\
LOAD_CONST (r3,5b) /* The string to print */ ;\
l.jal _ptest ;\
l.nop ;\
;\
l.addi r2,r0,FALSE /* Was it expected? */ ;\
l.addi r3,r0,res ;\
l.sfeq r2,r3 ;\
l.bnf 8f /* Branch if not expected */ ;\
;\
/* Sub-branch for FALSE found and expected */ ;\
l.jal _pfalse ;\
l.nop ;\
PUTC ('\n') ;\
l.j 9f ;\
l.nop ;\
8: ;\
/* Sub-branch for FALSE found and not expected */ ;\
l.jal _pfalse ;\
l.nop ;\
l.jal _punexpected ;\
l.nop ;\
9:
/* ----------------------------------------------------------------------------
* Simple stack, will be pointed to by r1, which is the next empty slot
* ------------------------------------------------------------------------- */
.section .data
.balign 4
.global _stack
_stack:
.space 0x1000,0x0
 
/* ----------------------------------------------------------------------------
* reset exception
* ------------------------------------------------------------------------- */
.section .except, "ax"
l.addi r1,r0,0
.section .text
.org 0x100
_reset:
l.movhi r1,hi(_stack) /* Set up the stack */
l.ori r1,r1,lo(_stack)
l.movhi r3,hi(_init_mc) /* Code starts with MC setup */
l.ori r3,r3,lo(_init_mc)
l.jr r3
l.nop
/* ----------------------------------------------------------------------------
* Subroutine to print out a string
*
* The string is followed by a newline
*
* Parameters:
* r3 Pointer to the string to print
* ------------------------------------------------------------------------- */
_puts:
l.add r2,r0,r3 /* Copy the string pointer */
/* Loop getting and printing each char until end of string */
10:
l.lbz r3,0(r2)
l.sfeq r3,r0 /* NULL termination? */
l.bf 11f
 
l.addi r2,r2,1 /* Delay slot, move to next char */
l.j 10b /* Repeat */
l.nop NOP_PUTC /* Delay slot */
 
11:
l.jr r9 /* Return */
l.nop
 
/* ----------------------------------------------------------------------------
* Subroutine to print out a test name prompt
*
* The string is preceded by two spaces
*
* Parameters:
* r3 Pointer to the test name to print
* ------------------------------------------------------------------------- */
_ptest:
PUSH(r9) /* Save the return address */
PUSH(r3) /* Save the test name for later */
 
LOAD_STR(r3, " ") /* Prefix */
l.jal _puts
l.nop
 
POP(r3) /* Test name */
l.jal _puts
l.nop
POP (r9)
l.jr r9
 
 
/* ----------------------------------------------------------------------------
* Subroutine to print out "OK"
*
* The string is followed by a newline
* ------------------------------------------------------------------------- */
_pok:
PUSH(r9) /* Save the return address */
 
LOAD_STR(r3, "OK\n")
l.jal _puts
l.nop
 
POP (r9)
l.jr r9
 
 
/* ----------------------------------------------------------------------------
* Subroutine to print out "Failed"
*
* The string is followed by a ": ", which will then allow a report
* ------------------------------------------------------------------------- */
_pfail:
PUSH(r9) /* Save the return address */
 
LOAD_STR(r3, "Failed: ")
l.jal _puts
l.nop
 
POP (r9)
l.jr r9
 
/* ----------------------------------------------------------------------------
* Subroutine to print out "TRUE"
* ------------------------------------------------------------------------- */
_ptrue:
PUSH(r9) /* Save the return address */
 
LOAD_STR(r3, "TRUE")
l.jal _puts
l.nop
 
POP (r9)
l.jr r9
 
 
/* ----------------------------------------------------------------------------
* Subroutine to print out "FALSE"
* ------------------------------------------------------------------------- */
_pfalse:
PUSH(r9) /* Save the return address */
 
LOAD_STR(r3, "FALSE")
l.jal _puts
l.nop
 
POP (r9)
l.jr r9
 
/* ----------------------------------------------------------------------------
* Subroutine to print out "unexpected"
*
* Preceded by a space and followed by a newline
* ------------------------------------------------------------------------- */
_punexpected:
PUSH(r9) /* Save the return address */
 
LOAD_STR(r3, " unexpected\n")
l.jal _puts
l.nop
 
POP (r9)
l.jr r9
 
/* ----------------------------------------------------------------------------
* Memory controller initialization initialization
* ------------------------------------------------------------------------- */
_init_mc:
l.movhi r3,hi(MC_BASE_ADDR)
l.ori r3,r3,lo(MC_BASE_ADDR)
l.addi r4,r3,MC_CSC(0)
l.movhi r5,hi(FLASH_BASE_ADDR)
l.srai r5,r5,6
l.ori r5,r5,0x0025
l.sw 0(r4),r5
l.addi r4,r3,MC_TMS(0)
l.movhi r5,hi(FLASH_TMS_VAL)
l.ori r5,r5,lo(FLASH_TMS_VAL)
l.sw 0(r4),r5
l.addi r4,r3,MC_BA_MASK
l.addi r5,r0,MC_MASK_VAL
l.sw 0(r4),r5
l.addi r4,r3,MC_CSR
l.movhi r5,hi(MC_CSR_VAL)
l.ori r5,r5,lo(MC_CSR_VAL)
l.sw 0(r4),r5
l.addi r4,r3,MC_TMS(1)
l.movhi r5,hi(SDRAM_TMS_VAL)
l.ori r5,r5,lo(SDRAM_TMS_VAL)
l.sw 0(r4),r5
l.addi r4,r3,MC_CSC(1)
l.movhi r5,hi(SDRAM_BASE_ADDR)
l.srai r5,r5,6
l.ori r5,r5,0x0411
l.sw 0(r4),r5
/* ----------------------------------------------------------------------------
* Test of load single word and extend with sign: l.lws
* ------------------------------------------------------------------------- */
.section .rodata
50: .word 0xdeadbeef
51: .word 0x00000000
52: .word 0x7fffffff
53: .word 0x80000000
54: .word 0xffffffff
 
.section .text
_lws:
LOAD_STR (r3, "l.lws\n")
l.jal _puts
l.nop
 
/* Load with zero offset */
LOAD_CONST (r5,50b)
l.lws r4,0(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0xdeadbeef: ", r4, 0xdeadbeef)
LOAD_CONST (r5,51b)
l.lws r4,0(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x00000000: ", r4, 0x00000000)
LOAD_CONST (r5,52b)
l.lws r4,0(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x7fffffff: ", r4, 0x7fffffff)
LOAD_CONST (r5,53b)
l.lws r4,0(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x80000000: ", r4, 0x80000000)
LOAD_CONST (r5,54b)
l.lws r4,0(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0xffffffff: ", r4, 0xffffffff)
 
/* Load with positive offset */
LOAD_CONST (r5,50b)
l.lws r4,4(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x00000000: ", r4, 0x00000000)
LOAD_CONST (r5,50b)
l.lws r4,8(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x7fffffff: ", r4, 0x7fffffff)
LOAD_CONST (r5,50b)
l.lws r4,12(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x80000000: ", r4, 0x80000000)
LOAD_CONST (r5,50b)
l.lws r4,16(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0xffffffff: ", r4, 0xffffffff)
 
/* Load with negative offset */
LOAD_CONST (r5,54b)
l.lws r4,-16(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0xdeadbeef: ", r4, 0xdeadbeef)
LOAD_CONST (r5,54b)
l.lws r4,-12(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x00000000: ", r4, 0x00000000)
LOAD_CONST (r5,54b)
l.lws r4,-8(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x7fffffff: ", r4, 0x7fffffff)
LOAD_CONST (r5,54b)
l.lws r4,-4(r5)
CHECK_RES (" l.lws r4,0(r5): r4=0x80000000: ", r4, 0x80000000)
 
/* ----------------------------------------------------------------------------
* All done
* ------------------------------------------------------------------------- */
_exit:
LOAD_STR (r3, "Test completed\n")
l.jal _puts
l.nop
 
l.movhi r3,hi(ALL_DONE)
l.ori r3,r3,lo(ALL_DONE)
l.nop NOP_REPORT /* Should be 0xdeaddead */
 
l.addi r3,r0,0
l.nop NOP_EXIT
testsuite/test-code-or1k/lws-test/lws-test.S Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: testsuite/test-code-or1k/lws-test/Makefile.am =================================================================== --- testsuite/test-code-or1k/lws-test/Makefile.am (nonexistent) +++ testsuite/test-code-or1k/lws-test/Makefile.am (revision 104) @@ -0,0 +1,32 @@ +# Makefile.am for or1ksim testsuite CPU test program: lws-test + +# Copyright (C) Embecosm Limited, 2010 + +# Contributor Jeremy Bennett + +# This file is part of OpenRISC 1000 Architectural Simulator. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 3 of the License, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . */ + +# ----------------------------------------------------------------------------- +# This code is commented throughout for use with Doxygen. +# ----------------------------------------------------------------------------- + + +# A test program of the l.lws instruction +check_PROGRAMS = lws-test + +lws_test_SOURCES = lws-test.S + +lws_test_LDFLAGS = -T$(srcdir)/../default.ld
testsuite/test-code-or1k/lws-test/Makefile.am Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: testsuite/test-code-or1k/configure.ac =================================================================== --- testsuite/test-code-or1k/configure.ac (revision 101) +++ testsuite/test-code-or1k/configure.ac (revision 104) @@ -129,6 +129,7 @@ exit/Makefile \ ext/Makefile \ fbtest/Makefile \ + fp/Makefile \ functest/Makefile \ flag/Makefile \ int-test/Makefile \ @@ -137,6 +138,7 @@ kbdtest/Makefile \ local-global/Makefile \ loop/Makefile \ + lws-test/Makefile \ mc-async/Makefile \ mc-dram/Makefile \ mc-ssram/Makefile \ Index: testsuite/test-code-or1k/fp/Makefile.in =================================================================== --- testsuite/test-code-or1k/fp/Makefile.in (nonexistent) +++ testsuite/test-code-or1k/fp/Makefile.in (revision 104) @@ -0,0 +1,504 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile.am for or1ksim testsuite CPU test program: fp + +# Copyright (C) Embecosm Limited, 2010 + +# Contributor Jeremy Bennett + +# This file is part of OpenRISC 1000 Architectural Simulator. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 3 of the License, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . */ + +# ----------------------------------------------------------------------------- +# This code is commented throughout for use with Doxygen. +# ----------------------------------------------------------------------------- +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = fp$(EXEEXT) +subdir = fp +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_fp_OBJECTS = fp.$(OBJEXT) +fp_OBJECTS = $(am_fp_OBJECTS) +fp_LDADD = $(LDADD) +fp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(fp_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/../../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(fp_SOURCES) +DIST_SOURCES = $(fp_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIM = @SIM@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +fp_SOURCES = fp.S +fp_LDFLAGS = -T$(srcdir)/../default.ld +all: all-am + +.SUFFIXES: +.SUFFIXES: .S .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fp/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu fp/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +fp$(EXEEXT): $(fp_OBJECTS) $(fp_DEPENDENCIES) + @rm -f fp$(EXEEXT) + $(fp_LINK) $(fp_OBJECTS) $(fp_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fp.Po@am__quote@ + +.S.o: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.S.lo: +@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Index: testsuite/test-code-or1k/fp/fp.S =================================================================== --- testsuite/test-code-or1k/fp/fp.S (nonexistent) +++ testsuite/test-code-or1k/fp/fp.S (revision 104) @@ -0,0 +1,2438 @@ +/* fp.S. Floating point instruction set test of Or1ksim + + Copyright (C) 1999-2006 OpenCores + Copyright (C) 2010 Embecosm Limited + + Contributors various OpenCores participants + Contributor Jeremy Bennett + + This file is part of OpenRISC 1000 Architectural Simulator. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program. If not, see . */ + + +/* ---------------------------------------------------------------------------- + * Test coverage + * + * At present the tests are only reasonably comprehensive for lf.add.s and + * lf.div.s. This is intended as a template for future work, and still has + * omissions even so. + * + * Basic tests are provided for all single precision floating point + * numbers. Since Or1ksim translates these operations into host FP, there is + * little point in testing more of the subtleties of IEEE 745. + * + * However in future this test could be used with OpenRISC hardware, in which + * case exhaustive testing would be essential. + * ------------------------------------------------------------------------- */ + + +#include "spr-defs.h" +#include "board.h" + +/* ---------------------------------------------------------------------------- + * Coding conventions + * + * A simple rising stack is provided to starting at _stack and pointed to by + * r1. r1 points to the next free word. Only 32-bit registers may be pushed + * onto the stack. + * + * Temporary labels up to 49 are reserved for macros and subroutines. Each is + * used only once in any macro or subroutine. You can get in a serious mess if + * you get local label clashing in macros. + * + * Arguments to functions are passed in r3 through r8. + * r9 is the link (return address) + * r11 is for returning results + * r2 through r11 are not preserved across calls. All other registers are. + * ------------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------------- + * Memory controller constants + * ------------------------------------------------------------------------- */ + +#define MEM_RAM 0x00000000 + +#define MC_CSR (0x00) +#define MC_POC (0x04) +#define MC_BA_MASK (0x08) +#define MC_CSC(i) (0x10 + (i) * 8) +#define MC_TMS(i) (0x14 + (i) * 8) + +/* ---------------------------------------------------------------------------- + * Floating point constants (IEEE 754) + * + * For the record, the single precision format has 1 sign bit, 8 exponent bits + * and 23 fraction bits. + * + * seeeeeeeefffffffffffffffffffffff + * + * The exponent is biased by 2^7 - 1 (i.e 127 is subtracted from the value to + * give the actual exponent). Normalized numbers have a non-zero exponent (up + * to 2^8 - 2) and an implicit 1 before the fraction. Thus the value + * represented is + * + * (-1)^s * 1.fffffffffffffffffffffff * 2^(eeeeeeee - (2^7 - 1)) + * + * Special values used are: + * + * Zeroes Exponent is zero, fraction also zero + * Denormalized numbers Exponent is zero, fraction non-zero + * Infinities Exponent is 2^8 - 1, fraction is zero + * NaNs Exponent is 2^8 - 1, fraction is non-zero + * + * The top bit of the fraction in a NaN is often used to indicate the type of + * NaN. If 1, it is a "quiet" NaN, if 0 it is a "signalling" NaN. Quiet NaN's + * are generally propagated for FP errors. Signalling NaN's can be used for + * more unusual purposes + * + * In general any other bits of the NaN fraction are just propagated unchanged. + * ------------------------------------------------------------------------- */ + +#define FP_S_P_ZERO (0x00000000) /* Positive zero */ +#define FP_S_N_ZERO (0x80000000) /* Positive zero */ +#define FP_S_P_INF (0x7f800000) /* Positive infinity */ +#define FP_S_N_INF (0xff800000) /* Negative infinity */ +#define FP_S_P_NAN (0x7fc00000) /* Positive qNaN */ +#define FP_S_N_NAN (0xffc00000) /* Negative qNaN */ + +/* Some NaNs without all fraction bits set (permitted under IEEE 754) */ +#define FP_S_P_NAN_B (0x7f800001) /* Positive NaN, not all 1s in frac */ +#define FP_S_N_NAN_B (0xff800001) /* Negative NaN, not all 1s in frac */ + +/* Some single precision normalized numbers */ +#define FP_S_0_5 (0x3f000000) /* +0.5 */ +#define FP_S_ONE (0x3f800000) /* +1.0 */ +#define FP_S_1_5 (0x3fc00000) /* +1.5 */ +#define FP_S_TWO (0x40000000) /* +2.0 */ +#define FP_S_THREE (0x40400000) /* +3.0 */ +#define FP_S_HUGE1 (0x7e800000) /* +1.0 * 2^+126 */ +#define FP_S_HUGE2 (0x7f000000) /* +1.0 * 2^+127 */ +#define FP_S_N_0_5 (0xbf000000) /* -0.5 */ +#define FP_S_N_ONE (0xbf800000) /* -1.0 */ +#define FP_S_N_1_5 (0xbfc00000) /* -1.5 */ +#define FP_S_N_TWO (0xc0000000) /* -2.0 */ +#define FP_S_N_THREE (0xc0400000) /* -3.0 */ +#define FP_S_N_HUGE1 (0xfe800000) /* -1.0 * 2^+126 */ +#define FP_S_N_HUGE2 (0xff000000) /* -1.0 * 2^+127 */ + +/* Some denormalized numbers */ +#define FP_S_SMALL1 (0x00200000) /* +1.0 * 2^-129 */ +#define FP_S_SMALL2 (0x00400000) /* +1.0 * 2^-128 */ +#define FP_S_N_SMALL1 (0x80200000) /* -1.0 * 2^-129 */ +#define FP_S_N_SMALL2 (0x80400000) /* -1.0 * 2^-128 */ + +/* Indicator of completion */ +#define ALL_DONE (0xdeaddead) + +/* Logical values */ +#define TRUE 1 +#define FALSE 0 + + +/* ---------------------------------------------------------------------------- + * Macro to push a register onto the stack + * + * r1 points to the next free slot. Push the supplied register on, then + * advance the stack pointer. + * + * Arguments: + * reg The register to push + * + * Registers modified + * r1 + * ------------------------------------------------------------------------- */ +#define PUSH(reg) \ + l.sw 0(r1),reg /* Push */ ;\ + l.addi r1,r1,4 /* Advance the stack */ + +/* ---------------------------------------------------------------------------- + * Macro to pop a register off the stack + * + * r1 points to the next free slot. Decrement the stack pointer, then pop the + * requested register. + * + * Arguments: + * reg The register to pop + * + * Registers modified + * r1 + * ------------------------------------------------------------------------- */ +#define POP(reg) \ + l.addi r1,r1,-4 /* Decrement the stack */ ;\ + l.lws reg,0(r1) /* Pop */ + +/* ---------------------------------------------------------------------------- + * Macro to load a 32-bit constant into a register + * + * Arguments: + * reg The register to load + * val The value to load + * + * ------------------------------------------------------------------------- */ +#define LOAD_CONST(reg,val) \ + l.movhi reg,hi(val) ;\ + l.ori reg,reg,lo(val) + +/* ---------------------------------------------------------------------------- + * Macro to define and load a pointer to a string + * + * Arguments: + * reg The register to load + * str The string + * + * ------------------------------------------------------------------------- */ +#define LOAD_STR(reg,str) \ + .section .rodata ;\ +1: ;\ + .string str ;\ + ;\ + .section .text ;\ + l.movhi reg,hi(1b) ;\ + l.ori reg,reg,lo(1b) + +/* ---------------------------------------------------------------------------- + * Macro to print a character + * + * Arguments: + * c The character to print + * ------------------------------------------------------------------------- */ +#define PUTC(c) \ + l.addi r3,r0,c ;\ + l.nop NOP_PUTC + +/* ---------------------------------------------------------------------------- + * Macro for recording the result of a test + * + * The test result is in r4. Print out the name of test indented two spaces, + * followed by ": ", either "OK" or "Failed" and a newline. + * + * Arguments: + * str Textual name of the test + * reg The result to test (not r2) + * val Desired result of the test + * ------------------------------------------------------------------------- */ +#define CHECK_RES(str,reg,val) \ + .section .rodata ;\ +2: ;\ + .string str ;\ + ;\ + .section .text ;\ + PUSH (reg) /* Save the register to test */ ;\ + ;\ + LOAD_CONST (r3,2b) /* Print out the string */ ;\ + l.jal _ptest ;\ + l.nop ;\ + ;\ + LOAD_CONST(r2,val) /* The desired result */ ;\ + POP (reg) /* The register to test */ ;\ + PUSH (reg) /* May need again later */ ;\ + l.sfeq r2,reg /* Does the result match? */ ;\ + l.bf 3f ;\ + l.nop ;\ + ;\ + l.jal _pfail /* Test failed */ ;\ + l.nop ;\ + POP (reg) /* Report the register */ ;\ + l.add r3,r0,reg ;\ + l.j 4f ;\ + l.nop NOP_REPORT ;\ +3: ;\ + POP (reg) /* Discard the register */ ;\ + l.jal _pok /* Test succeeded */ ;\ + l.nop ;\ +4: + +/* ---------------------------------------------------------------------------- + * Macro for recording the result of a comparison + * + * If the flag is set print the string argument indented by 2 spaces, followed + * by "TRUE" and a newline, otherwise print the string argument indented by + * two spaces, followed by "FALSE" and a newline. + * + * Arguments: + * str Textual name of the test + * res Expected result (TRUE or FALSE) + * ------------------------------------------------------------------------- */ +#define CHECK_FLAG(str,res) \ + .section .rodata ;\ +5: ;\ + .string str ;\ + ;\ + .section .text ;\ + l.bnf 7f /* Branch if result FALSE */ ;\ + ;\ + /* Branch for TRUE result */ ;\ + LOAD_CONST (r3,5b) /* The string to print */ ;\ + l.jal _ptest ;\ + l.nop ;\ + ;\ + l.addi r2,r0,TRUE /* Was it expected? */ ;\ + l.addi r3,r0,res ;\ + l.sfeq r2,r3 ;\ + l.bnf 6f /* Branch if not expected */ ;\ + ;\ + /* Sub-branch for TRUE found and expected */ ;\ + l.jal _ptrue ;\ + l.nop ;\ + PUTC ('\n') ;\ + l.j 9f ;\ + l.nop ;\ +6: ;\ + /* Sub-branch for TRUE found and not expected */ ;\ + l.jal _ptrue ;\ + l.nop ;\ + l.jal _punexpected ;\ + l.nop ;\ + l.j 9f ;\ + l.nop ;\ + ;\ +7: ;\ + /* Branch for FALSE result */ ;\ + LOAD_CONST (r3,5b) /* The string to print */ ;\ + l.jal _ptest ;\ + l.nop ;\ + ;\ + l.addi r2,r0,FALSE /* Was it expected? */ ;\ + l.addi r3,r0,res ;\ + l.sfeq r2,r3 ;\ + l.bnf 8f /* Branch if not expected */ ;\ + ;\ + /* Sub-branch for FALSE found and expected */ ;\ + l.jal _pfalse ;\ + l.nop ;\ + PUTC ('\n') ;\ + l.j 9f ;\ + l.nop ;\ +8: ;\ + /* Sub-branch for FALSE found and not expected */ ;\ + l.jal _pfalse ;\ + l.nop ;\ + l.jal _punexpected ;\ + l.nop ;\ +9: + +/* ---------------------------------------------------------------------------- + * Simple stack, will be pointed to by r1, which is the next empty slot + * ------------------------------------------------------------------------- */ + .section .data + .balign 4 + .global _stack +_stack: + .space 0x1000,0x0 + +/* ---------------------------------------------------------------------------- + * reset exception + * ------------------------------------------------------------------------- */ + .section .except, "ax" + l.addi r1,r0,0 + + .section .text + .org 0x100 +_reset: + l.movhi r1,hi(_stack) /* Set up the stack */ + l.ori r1,r1,lo(_stack) + + l.movhi r3,hi(_init_mc) /* Code starts with MC setup */ + l.ori r3,r3,lo(_init_mc) + l.jr r3 + l.nop + +/* ---------------------------------------------------------------------------- + * Subroutine to print out a string + * + * The string is followed by a newline + * + * Parameters: + * r3 Pointer to the string to print + * ------------------------------------------------------------------------- */ +_puts: + l.add r2,r0,r3 /* Copy the string pointer */ + + /* Loop getting and printing each char until end of string */ +10: + l.lbz r3,0(r2) + l.sfeq r3,r0 /* NULL termination? */ + l.bf 11f + + l.addi r2,r2,1 /* Delay slot, move to next char */ + l.j 10b /* Repeat */ + l.nop NOP_PUTC /* Delay slot */ + +11: + l.jr r9 /* Return */ + l.nop + +/* ---------------------------------------------------------------------------- + * Subroutine to print out a test name prompt + * + * The string is preceded by two spaces + * + * Parameters: + * r3 Pointer to the test name to print + * ------------------------------------------------------------------------- */ +_ptest: + PUSH(r9) /* Save the return address */ + PUSH(r3) /* Save the test name for later */ + + LOAD_STR(r3, " ") /* Prefix */ + l.jal _puts + l.nop + + POP(r3) /* Test name */ + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + + +/* ---------------------------------------------------------------------------- + * Subroutine to print out "OK" + * + * The string is followed by a newline + * ------------------------------------------------------------------------- */ +_pok: + PUSH(r9) /* Save the return address */ + + LOAD_STR(r3, "OK\n") + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + + +/* ---------------------------------------------------------------------------- + * Subroutine to print out "Failed" + * + * The string is followed by a ": ", which will then allow a report + * ------------------------------------------------------------------------- */ +_pfail: + PUSH(r9) /* Save the return address */ + + LOAD_STR(r3, "Failed: ") + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + +/* ---------------------------------------------------------------------------- + * Subroutine to print out "TRUE" + * ------------------------------------------------------------------------- */ +_ptrue: + PUSH(r9) /* Save the return address */ + + LOAD_STR(r3, "TRUE") + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + + +/* ---------------------------------------------------------------------------- + * Subroutine to print out "FALSE" + * ------------------------------------------------------------------------- */ +_pfalse: + PUSH(r9) /* Save the return address */ + + LOAD_STR(r3, "FALSE") + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + +/* ---------------------------------------------------------------------------- + * Subroutine to print out "unexpected" + * + * Preceded by a space and followed by a newline + * ------------------------------------------------------------------------- */ +_punexpected: + PUSH(r9) /* Save the return address */ + + LOAD_STR(r3, " unexpected\n") + l.jal _puts + l.nop + + POP (r9) + l.jr r9 + +/* ---------------------------------------------------------------------------- + * Memory controller initialization initialization + * ------------------------------------------------------------------------- */ +_init_mc: + + l.movhi r3,hi(MC_BASE_ADDR) + l.ori r3,r3,lo(MC_BASE_ADDR) + + l.addi r4,r3,MC_CSC(0) + l.movhi r5,hi(FLASH_BASE_ADDR) + l.srai r5,r5,6 + l.ori r5,r5,0x0025 + l.sw 0(r4),r5 + + l.addi r4,r3,MC_TMS(0) + l.movhi r5,hi(FLASH_TMS_VAL) + l.ori r5,r5,lo(FLASH_TMS_VAL) + l.sw 0(r4),r5 + + l.addi r4,r3,MC_BA_MASK + l.addi r5,r0,MC_MASK_VAL + l.sw 0(r4),r5 + + l.addi r4,r3,MC_CSR + l.movhi r5,hi(MC_CSR_VAL) + l.ori r5,r5,lo(MC_CSR_VAL) + l.sw 0(r4),r5 + + l.addi r4,r3,MC_TMS(1) + l.movhi r5,hi(SDRAM_TMS_VAL) + l.ori r5,r5,lo(SDRAM_TMS_VAL) + l.sw 0(r4),r5 + + l.addi r4,r3,MC_CSC(1) + l.movhi r5,hi(SDRAM_BASE_ADDR) + l.srai r5,r5,6 + l.ori r5,r5,0x0411 + l.sw 0(r4),r5 + +/* ---------------------------------------------------------------------------- + * Test of single precision add: lf.add.s + * ------------------------------------------------------------------------- */ + .section .text +_add_s: + LOAD_STR (r3, "lf.add.s\n") + l.jal _puts + l.nop + + /* Simple integer addition */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + 0.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_ZERO) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -0.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + 1.0 = 2.0: ", r4, FP_S_TWO) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_ONE) + lf.add.s r4,r5,r6 + CHECK_RES (" 2.0 + 1.0 = 3.0: ", r4, FP_S_THREE) + + /* Fractional addition */ + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_1_5) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.5 + 1.5 = 3.0: ", r4, FP_S_THREE) + + /* Addition with negative numbers */ + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_N_ONE) + lf.add.s r4,r5,r6 + CHECK_RES (" 2.0 + -1.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -2.0 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_ONE) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -1.0 = +0.0: ", r4, FP_S_P_ZERO) + + /* Addition with infinities */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + +inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_INF) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -inf = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_P_INF) + lf.add.s r4,r5,r6 + CHECK_RES ("+inf + +inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.add.s r4,r5,r6 + CHECK_RES ("+inf + -inf = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.add.s r4,r5,r6 + CHECK_RES ("-inf + -inf = -inf: ", r4, FP_S_N_INF) + + /* Addition with NaNs */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_NAN) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -NaN = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_P_NAN) + lf.add.s r4,r5,r6 + CHECK_RES ("+NaN + +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.add.s r4,r5,r6 + CHECK_RES ("+NaN + -NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.add.s r4,r5,r6 + CHECK_RES ("-NaN + -NaN = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN_B) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + +sNaN = +qNaN: ", r4, 0x7fc00001) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_NAN_B) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 + -sNaN = -qNaN: ", r4, 0xffc00001) + + /* Addition with overflow */ + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_HUGE2) + lf.add.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 + 1.0 * 2^127 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_HUGE2) + LOAD_CONST (r6,FP_S_N_HUGE2) + lf.add.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 + -1.0 * 2^127 = -inf: ", r4, FP_S_N_INF) + +/* ---------------------------------------------------------------------------- + * Test of single precision custom instruction: lf.cust1.s + * ------------------------------------------------------------------------- */ +_cust1_s: + LOAD_STR (r3, "lf.cust1.s\n") + l.jal _puts + l.nop + + /* Just test that the instruction does nothing */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.cust1.s r4,r5 /* Should do nothing */ + CHECK_RES ("l.cust1: ", r4, FP_S_ONE) + +/* ---------------------------------------------------------------------------- + * Test of single precision divide instruction: lf.div.s + * ------------------------------------------------------------------------- */ +_div_s: + LOAD_STR (r3, "lf.div.s\n") + l.jal _puts + l.nop + + /* Tests of integer division */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / 1.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES (" 2.0 / 1.0 = 2.0: ", r4, FP_S_TWO) + + /* Test division with fractional result */ + LOAD_CONST (r5,FP_S_THREE) + LOAD_CONST (r6,FP_S_TWO) + lf.div.s r4,r5,r6 + CHECK_RES (" 3.0 / 2.0 = 1.5: ", r4, FP_S_1_5) + + /* Test division of zero */ + LOAD_CONST (r5,FP_S_P_ZERO) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("+0.0 / 1.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_N_ZERO) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("-0.0 / 1.0 = -0.0: ", r4, FP_S_N_ZERO) + + /* Test signed division */ + LOAD_CONST (r5,FP_S_N_THREE) + LOAD_CONST (r6,FP_S_TWO) + lf.div.s r4,r5,r6 + CHECK_RES ("-3.0 / 2.0 = -1.5: ", r4, FP_S_N_1_5) + + LOAD_CONST (r5,FP_S_THREE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.div.s r4,r5,r6 + CHECK_RES (" 3.0 / -2.0 = -1.5: ", r4, FP_S_N_1_5) + + LOAD_CONST (r5,FP_S_N_THREE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.div.s r4,r5,r6 + CHECK_RES ("-3.0 / -2.0 = -1.5: ", r4, FP_S_1_5) + + /* Division by zero */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / +0.0 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / -0.0 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / +0.0 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / -0.0 = -inf: ", r4, FP_S_N_INF) + + /* Division with infinities */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / +inf = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_INF) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / -inf = -0.0: ", r4, FP_S_N_ZERO) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / +inf = -0.0: ", r4, FP_S_N_ZERO) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_N_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / -inf = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("+inf / 1.0 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("-inf / 1.0 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_N_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("+inf / -1.0 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_N_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("-inf / -1.0 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_P_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("+inf / +inf = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("+inf / -inf = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_P_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("-inf / +inf = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.div.s r4,r5,r6 + CHECK_RES ("-inf / -inf = -NaN: ", r4, FP_S_N_NAN) + + /* Division with NaNs */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_NAN) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 / -NaN = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_N_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 / -NaN = 1NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("+NaN / 1.0 = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("-NaN / 1.0 = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_N_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("+NaN / -1.0 = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_N_ONE) + lf.div.s r4,r5,r6 + CHECK_RES ("-NaN / -1.0 = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_P_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("+NaN / +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("+NaN / -NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_P_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("-NaN / +NaN = -NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.div.s r4,r5,r6 + CHECK_RES ("-NaN / -NaN = -NaN: ", r4, FP_S_N_NAN) + + /* Division with overflow */ + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_SMALL1) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 / 1.0 * 2^-129 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_HUGE2) + LOAD_CONST (r6,FP_S_SMALL1) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 / 1.0 * 2^-129 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_N_SMALL1) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 / -1.0 * 2^-129 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_N_HUGE2) + LOAD_CONST (r6,FP_S_N_SMALL1) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 / -1.0 * 2^-129 = +inf: ", r4, FP_S_P_INF) + + /* Division with underflow */ + LOAD_CONST (r5,FP_S_SMALL1) + LOAD_CONST (r6,FP_S_HUGE1) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^-129 / 1.0 * 2^127 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_N_SMALL1) + LOAD_CONST (r6,FP_S_HUGE1) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^-129 / 1.0 * 2^127 = -0.0: ", r4, FP_S_N_ZERO) + + LOAD_CONST (r5,FP_S_SMALL1) + LOAD_CONST (r6,FP_S_N_HUGE1) + lf.div.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^-129 / -1.0 * 2^127 = -0.0: ", r4, FP_S_N_ZERO) + + LOAD_CONST (r5,FP_S_N_SMALL1) + LOAD_CONST (r6,FP_S_N_HUGE1) + lf.div.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^-129 / -1.0 * 2^127 = +0.0: ", r4, FP_S_P_ZERO) + + /* Needs tests of normalization to denormalization */ + +/* ---------------------------------------------------------------------------- + * Test of single precision fp to integer conversion: lf.ftoi.s + * ------------------------------------------------------------------------- */ +v_ftoi_s: + LOAD_STR (r3, "lf.ftoi.s\n") + l.jal _puts + l.nop + + /* Integer conversion */ + LOAD_CONST (r5,FP_S_ONE) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) 1.0 = 1: ", r4, 0x00000001) + + LOAD_CONST (r5,FP_S_N_ONE) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -1.0 = -1: ", r4, 0xffffffff) + + LOAD_CONST (r5,FP_S_P_ZERO) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) +0.0 = 0: ", r4, 0x00000000) + + LOAD_CONST (r5,FP_S_N_ZERO) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -0.0 = 0: ", r4, 0x00000000) + + /* Fractional conversion (round towards zero) */ + LOAD_CONST (r5,FP_S_1_5) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) 1.5 = 1: ", r4, 0x00000001) + + LOAD_CONST (r5,FP_S_N_1_5) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -1.5 = -1: ", r4, 0xffffffff) + + /* Conversion of values too big */ + LOAD_CONST (r5,FP_S_HUGE1) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) 1.0 * 2^126 = -2^31: ", r4, 0x80000000) + + LOAD_CONST (r5,FP_S_N_HUGE1) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -1.0 * 2^126 = -2^31: ", r4, 0x80000000) + + /* Conversion of very small values */ + LOAD_CONST (r5,FP_S_SMALL1) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) 1.0 * 2^-129 = 0: ", r4, 0x00000000) + + LOAD_CONST (r5,FP_S_N_SMALL1) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -1.0 * 2^-129 = 0: ", r4, 0x00000000) + + /* Just basic check of Infinity & NaN */ + LOAD_CONST (r5,FP_S_P_INF) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) +inf = -2^31: ", r4, 0x80000000) + + LOAD_CONST (r5,FP_S_N_INF) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -inf = -2^31: ", r4, 0x80000000) + + LOAD_CONST (r5,FP_S_P_NAN) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) +NaN = -2^31: ", r4, 0x80000000) + + LOAD_CONST (r5,FP_S_N_NAN) + lf.ftoi.s r4,r5 + CHECK_RES ("(int) -NaN = -2^31: ", r4, 0x80000000) + +/* ---------------------------------------------------------------------------- + * Test of single precision integer to fp conversion: lf.itof.s + * ------------------------------------------------------------------------- */ +_itof_s: + LOAD_STR (r3, "lf.itof.s\n") + l.jal _puts + l.nop + + /* Integer conversion */ + LOAD_CONST (r5,FP_S_ONE) + lf.ftoi.s r4,r5 + CHECK_RES ("(float) 1.0 = 1: ", r4, 0x00000001) + + LOAD_CONST (r5,FP_S_N_ONE) + lf.ftoi.s r4,r5 + CHECK_RES ("(float) -1.0 = -1: ", r4, 0xffffffff) + + LOAD_CONST (r5,FP_S_P_ZERO) + lf.ftoi.s r4,r5 + CHECK_RES ("(float) +0.0 = 0: ", r4, 0x00000000) + + LOAD_CONST (r5,FP_S_N_ZERO) + lf.ftoi.s r4,r5 + CHECK_RES ("(float) -0.0 = 0: ", r4, 0x00000000) + +/* ---------------------------------------------------------------------------- + * Test of single precision multiply and add: lf.madd.s + * ------------------------------------------------------------------------- */ +_madd_s: + LOAD_STR (r3, "lf.madd.s\n") + l.jal _puts + l.nop + + /* Test of integer multiply and add */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 + 1.0 * 1.0 = 2.0: ", r4, FP_S_TWO) + + /* Multiply and add with fractions */ + LOAD_CONST (r4,FP_S_0_5) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES (" 0.5 + 1.0 * 1.0 = 1.5: ", r4, FP_S_1_5) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_0_5) + LOAD_CONST (r6,FP_S_TWO) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 + 0.5 * 2.0 = 2.0: ", r4, FP_S_TWO) + + /* Multiply and add with negative numbers */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_TWO) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 + -1.0 * 2.0 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r4,FP_S_N_TWO) + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_0_5) + lf.madd.s r4,r5,r6 + CHECK_RES ("-2.0 + 2.0 * 0.5 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r4,FP_S_N_0_5) + LOAD_CONST (r5,FP_S_N_0_5) + LOAD_CONST (r6,FP_S_THREE) + lf.madd.s r4,r5,r6 + CHECK_RES ("-0.5 + -0.5 * 3.0 = -2.0: ", r4, FP_S_N_TWO) + + /* Multiply and add with zeros (more needed) */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.madd.s r4,r5,r6 + CHECK_RES ("+0.0 + +0.0 * +0.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + LOAD_CONST (r6,FP_S_N_ZERO) + lf.madd.s r4,r5,r6 + CHECK_RES ("-0.0 + +0.0 * -0.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + LOAD_CONST (r6,FP_S_N_ZERO) + lf.madd.s r4,r5,r6 + CHECK_RES ("-0.0 + -0.0 * -0.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r4,FP_S_N_ONE) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES ("-1.0 + 1.0 * 1.0 = +0.0: ", r4, FP_S_P_ZERO) + + /* Multiply and add with infinities (more needed) */ + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES ("+inf + 1.0 * 1.0 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 + 1.0 * +inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.madd.s r4,r5,r6 + CHECK_RES ("+inf + 1.0 * +inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES ("-inf + 1.0 * 1.0 = -inf: ", r4, FP_S_N_INF) + + /* Multiply and add with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES ("+NaN + 1.0 * 1.0 = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 + 1.0 * +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.madd.s r4,r5,r6 + CHECK_RES ("+NaN + 1.0 * +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES ("-NaN + 1.0 * 1.0 = -NaN: ", r4, FP_S_N_NAN) + + /* Multiply and add with overflow (more needed) */ + LOAD_CONST (r4,FP_S_HUGE2) + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_ONE) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 + 1.0 * 2^127 * 1.0 = +inf: ", + r4, FP_S_P_INF) + + LOAD_CONST (r4,FP_S_HUGE2) + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_SMALL1) + lf.madd.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 + 1.0 * 2^127 * 1.0 * 2^-129 = +inf: ", + r4, FP_S_HUGE2) + +/* ---------------------------------------------------------------------------- + * Test of single precision multiply: lf.mul.s + * ------------------------------------------------------------------------- */ +_mul_s: + LOAD_STR (r3, "lf.mul.s\n") + l.jal _puts + l.nop + + /* Tests of integer multiplication */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.mul.s r4,r5,r6 + CHECK_RES (" 1.0 * 1.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_THREE) + LOAD_CONST (r6,FP_S_ONE) + lf.mul.s r4,r5,r6 + CHECK_RES (" 3.0 * 1.0 = 3.0: ", r4, FP_S_THREE) + + /* Multiplication with fractions */ + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES (" 1.5 * 2.0 = 3.0: ", r4, FP_S_THREE) + + /* Multiplication with negative numbers */ + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("-1.0 * 2.0 = -2.0: ", r4, FP_S_N_TWO) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("-1.0 * -2.0 = +2.0: ", r4, FP_S_TWO) + + /* Multiplication with zeros */ + LOAD_CONST (r5,FP_S_P_ZERO) + LOAD_CONST (r6,FP_S_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("+0.0 * 2.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_N_ZERO) + LOAD_CONST (r6,FP_S_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("+0.0 * 2.0 = +0.0: ", r4, FP_S_N_ZERO) + + /* Multiplication with infinities (more needed) */ + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_N_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("+inf * -2.0 = -inf: ", r4, FP_S_N_INF) + + /* Multiplication with NaNs (more needed) */ + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_TWO) + lf.mul.s r4,r5,r6 + CHECK_RES ("+NaN * 2.0 = +NaN: ", r4, FP_S_P_NAN) + + /* Multiplication overflow */ + LOAD_CONST (r5,FP_S_HUGE1) + LOAD_CONST (r6,FP_S_HUGE1) + lf.mul.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 * 1.0 * 2^127 = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_HUGE1) + LOAD_CONST (r6,FP_S_HUGE1) + lf.mul.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 * 1.0 * 2^127 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_HUGE1) + LOAD_CONST (r6,FP_S_N_HUGE1) + lf.mul.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 * -1.0 * 2^127 = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_N_HUGE1) + LOAD_CONST (r6,FP_S_N_HUGE1) + lf.mul.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 * -1.0 * 2^127 = +inf: ", r4, FP_S_P_INF) + +/* ---------------------------------------------------------------------------- + * Test of single precision remainder: lf.rem.s + * ------------------------------------------------------------------------- */ +_rem_s: + LOAD_STR (r3, "lf.rem.s\n") + l.jal _puts + l.nop + + /* Tests of integer remainder */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.rem.s r4,r5,r6 + CHECK_RES (" 1.0 % 1.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES (" 1.0 % 2.0 = 1.0: ", r4, FP_S_ONE) + + /* Remainder with fractions */ + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES (" 1.5 % 2.0 = 1.5: ", r4, FP_S_1_5) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_1_5) + lf.rem.s r4,r5,r6 + CHECK_RES (" 2.0 % 1.5 = 0.5: ", r4, FP_S_0_5) + + LOAD_CONST (r5,FP_S_THREE) + LOAD_CONST (r6,FP_S_1_5) + lf.rem.s r4,r5,r6 + CHECK_RES (" 3.0 % 1.5 = +0.0: ", r4, FP_S_P_ZERO) + + /* Remainder with negative numbers */ + LOAD_CONST (r5,FP_S_N_THREE) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("-3.0 % 2.0 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r5,FP_S_N_THREE) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("-3.0 % 2.0 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r5,FP_S_THREE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES (" 3.0 % -2.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_N_THREE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("-3.0 % -2.0 = -1.0: ", r4, FP_S_N_ONE) + + /* Remainder with zeros (more are needed) */ + LOAD_CONST (r5,FP_S_P_ZERO) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("+0.0 % 2.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_N_ZERO) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("-0.0 % 2.0 = -0.0: ", r4, FP_S_N_ZERO) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.rem.s r4,r5,r6 + CHECK_RES (" 2.0 % +0.0 = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_N_TWO) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.rem.s r4,r5,r6 + CHECK_RES ("-2.0 % +0.0 = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_N_ZERO) + lf.rem.s r4,r5,r6 + CHECK_RES (" 2.0 % -0.0 = -NaN: ", r4, FP_S_N_NAN) + + /* Remainder with infinities (more are needed) */ + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_P_INF) + lf.rem.s r4,r5,r6 + CHECK_RES (" 2.0 % +inf = 2.0: ", r4, FP_S_TWO) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("+inf % 2.0 = -NaN: ", r4, FP_S_N_NAN) + + /* Remainder with NaNs (more are needed) */ + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_P_NAN) + lf.rem.s r4,r5,r6 + CHECK_RES (" 2.0 % +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_TWO) + lf.rem.s r4,r5,r6 + CHECK_RES ("+NaN % 2.0 = +NaN: ", r4, FP_S_P_NAN) + + /* Remainder with overflow of division (more are needed) */ + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_SMALL1) + lf.rem.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 % 1.0 * 2^-129 = +0.0: ", r4, FP_S_P_ZERO) + + /* Remainder with underflow (more are needed) */ + LOAD_CONST (r5,FP_S_SMALL1) + LOAD_CONST (r6,FP_S_HUGE2) + lf.rem.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^-129 % 1.0 * 2^127 = +0.0: ", r4, FP_S_SMALL1) + + /* Remainder with denormalization (more are needed) */ + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if equal: lf.sfeq.s + * ------------------------------------------------------------------------- */ +_sfeq_s: + LOAD_STR (r3, "lf.sfeq.s\n") + l.jal _puts + l.nop + + /* Tests of integer equality */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 == 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 == 2.0: ", FALSE) + + /* Fractional equality */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.5 == 1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.5 == 0.5: ", FALSE) + + /* Signed equality */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfeq.s r4,r5 + CHECK_FLAG ("-1.5 == -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.5 == -1.5: ", FALSE) + + /* Equality of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+0.0 == +0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfeq.s r4,r5 + CHECK_FLAG ("-0.0 == -0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+0.0 == -0.0: ", TRUE) + + /* Equality with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 == +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+inf == +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfeq.s r4,r5 + CHECK_FLAG ("-inf == -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+inf == -inf: ", FALSE) + + /* Equality with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 == +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+NaN == +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfeq.s r4,r5 + CHECK_FLAG ("-NaN == -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfeq.s r4,r5 + CHECK_FLAG ("+NaN == -NaN: ", FALSE) + + /* Equality with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 == 1.0 * 2^-129: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 == 1.0 * 2^-128: ", FALSE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfeq.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 == 1.0 * 2^-128: ", FALSE) + + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if greater than or equal: lf.sfge.s + * ------------------------------------------------------------------------- */ +_sfge_s: + LOAD_STR (r3, "lf.sfge.s\n") + l.jal _puts + l.nop + + /* Tests of integer greater than or equality */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 >= 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_TWO) + LOAD_CONST (r5,FP_S_ONE) + lf.sfge.s r4,r5 + CHECK_FLAG (" 2.0 >= 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 >= 2.0: ", FALSE) + + /* Fractional greater than or equality */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.5 >= 1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.5 >= 0.5: ", TRUE) + + LOAD_CONST (r4,FP_S_0_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG (" 0.5 >= 1.5: ", FALSE) + + /* Signed greater than or equality */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG ("-1.5 >= -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_0_5) + lf.sfge.s r4,r5 + CHECK_FLAG ("-1.5 >= -0.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_0_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG ("-0.5 >= -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.5 >= -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfge.s r4,r5 + CHECK_FLAG ("-1.5 >= 1.5: ", FALSE) + + /* Greater than or equality of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfge.s r4,r5 + CHECK_FLAG ("+0.0 >= +0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfge.s r4,r5 + CHECK_FLAG ("-0.0 >= -0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfge.s r4,r5 + CHECK_FLAG ("+0.0 >= -0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfge.s r4,r5 + CHECK_FLAG ("-0.0 >= +0.0: ", TRUE) + + /* Greater than or equality with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 >= +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfge.s r4,r5 + CHECK_FLAG ("+inf >= 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 >= -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfge.s r4,r5 + CHECK_FLAG ("-inf >= 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfge.s r4,r5 + CHECK_FLAG ("+inf >= +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfge.s r4,r5 + CHECK_FLAG ("-inf >= -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfge.s r4,r5 + CHECK_FLAG ("+inf >= -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfge.s r4,r5 + CHECK_FLAG ("-inf >= +inf: ", FALSE) + + /* Greater than or equality with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 >= +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfge.s r4,r5 + CHECK_FLAG ("+NaN >= +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfge.s r4,r5 + CHECK_FLAG ("-NaN >= -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfge.s r4,r5 + CHECK_FLAG ("+NaN >= -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfge.s r4,r5 + CHECK_FLAG ("-NaN >= +NaN: ", FALSE) + + /* Greater than or equality with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 >= 1.0 * 2^-129: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 >= 1.0 * 2^-128: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 >= 1.0 * 2^-129: ", TRUE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 >= 1.0 * 2^-128: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_HUGE1) + lf.sfge.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 >= 1.0 * 2^126: ", FALSE) + + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if greater than: lf.sfgt.s + * ------------------------------------------------------------------------- */ +_sfgt_s: + LOAD_STR (r3, "lf.sfgt.s\n") + l.jal _puts + l.nop + + /* Tests of integer greater than */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 > 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_TWO) + LOAD_CONST (r5,FP_S_ONE) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 2.0 > 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 > 2.0: ", FALSE) + + /* Fractional greater than */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.5 > 1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.5 > 0.5: ", TRUE) + + LOAD_CONST (r4,FP_S_0_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 0.5 > 1.5: ", FALSE) + + /* Signed greater than */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-1.5 > -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_0_5) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-1.5 > -0.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_0_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-0.5 > -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.5 > -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-1.5 > 1.5: ", FALSE) + + /* Greater than of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+0.0 > +0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-0.0 > -0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+0.0 > -0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-0.0 > +0.0: ", FALSE) + + /* Greater than with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 > +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+inf > 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 > -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-inf > 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+inf > +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-inf > -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+inf > -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-inf > +inf: ", FALSE) + + /* Greater than with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 > +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+NaN > +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-NaN > -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfgt.s r4,r5 + CHECK_FLAG ("+NaN > -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfgt.s r4,r5 + CHECK_FLAG ("-NaN > +NaN: ", FALSE) + + /* Greater than with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 > 1.0 * 2^-129: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 > 1.0 * 2^-128: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 > 1.0 * 2^-129: ", TRUE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 > 1.0 * 2^-128: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_HUGE1) + lf.sfgt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 > 1.0 * 2^126: ", FALSE) + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if less than or equal: lf.sfle.s + * ------------------------------------------------------------------------- */ +_sfle_s: + LOAD_STR (r3, "lf.sfle.s\n") + l.jal _puts + l.nop + + /* Tests of integer less than or equality */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 <= 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_TWO) + LOAD_CONST (r5,FP_S_ONE) + lf.sfle.s r4,r5 + CHECK_FLAG (" 2.0 <= 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 <= 2.0: ", TRUE) + + /* Fractional less than or equality */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.5 <= 1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.5 <= 0.5: ", FALSE) + + LOAD_CONST (r4,FP_S_0_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG (" 0.5 <= 1.5: ", TRUE) + + /* Signed less than or equality */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG ("-1.5 <= -1.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_0_5) + lf.sfle.s r4,r5 + CHECK_FLAG ("-1.5 <= -0.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_0_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG ("-0.5 <= -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.5 <= -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfle.s r4,r5 + CHECK_FLAG ("-1.5 <= 1.5: ", TRUE) + + /* Less than or equality of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfle.s r4,r5 + CHECK_FLAG ("+0.0 <= +0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfle.s r4,r5 + CHECK_FLAG ("-0.0 <= -0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfle.s r4,r5 + CHECK_FLAG ("+0.0 <= -0.0: ", TRUE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfle.s r4,r5 + CHECK_FLAG ("-0.0 <= +0.0: ", TRUE) + + /* Less than or equality with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 <= +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfle.s r4,r5 + CHECK_FLAG ("+inf <= 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 <= -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sfle.s r4,r5 + CHECK_FLAG ("-inf <= 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfle.s r4,r5 + CHECK_FLAG ("+inf <= +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfle.s r4,r5 + CHECK_FLAG ("-inf <= -inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfle.s r4,r5 + CHECK_FLAG ("+inf <= -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfle.s r4,r5 + CHECK_FLAG ("-inf <= +inf: ", TRUE) + + /* Less than or equality with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 <= +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfle.s r4,r5 + CHECK_FLAG ("+NaN <= +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfle.s r4,r5 + CHECK_FLAG ("-NaN <= -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfle.s r4,r5 + CHECK_FLAG ("+NaN <= -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfle.s r4,r5 + CHECK_FLAG ("-NaN <= +NaN: ", FALSE) + + /* Less than or equality with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 <= 1.0 * 2^-129: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 <= 1.0 * 2^-128: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 <= 1.0 * 2^-129: ", FALSE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 <= 1.0 * 2^-128: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_HUGE1) + lf.sfle.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 <= 1.0 * 2^126: ", TRUE) + + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if less than: lf.sflt.s + * ------------------------------------------------------------------------- */ +_sflt_s: + LOAD_STR (r3, "lf.sflt.s\n") + l.jal _puts + l.nop + + /* Tests of integer less than */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 < 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_TWO) + LOAD_CONST (r5,FP_S_ONE) + lf.sflt.s r4,r5 + CHECK_FLAG (" 2.0 < 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 < 2.0: ", TRUE) + + /* Fractional less than */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.5 < 1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.5 < 0.5: ", FALSE) + + LOAD_CONST (r4,FP_S_0_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG (" 0.5 < 1.5: ", TRUE) + + /* Signed less than */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG ("-1.5 < -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_0_5) + lf.sflt.s r4,r5 + CHECK_FLAG ("-1.5 < -0.5: ", TRUE) + + LOAD_CONST (r4,FP_S_N_0_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG ("-0.5 < -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.5 < -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sflt.s r4,r5 + CHECK_FLAG ("-1.5 < 1.5: ", TRUE) + + /* Less than of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sflt.s r4,r5 + CHECK_FLAG ("+0.0 < +0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sflt.s r4,r5 + CHECK_FLAG ("-0.0 < -0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sflt.s r4,r5 + CHECK_FLAG ("+0.0 < -0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sflt.s r4,r5 + CHECK_FLAG ("-0.0 < +0.0: ", FALSE) + + /* Less than with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 < +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sflt.s r4,r5 + CHECK_FLAG ("+inf < 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_N_INF) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 < -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_ONE) + lf.sflt.s r4,r5 + CHECK_FLAG ("-inf < 1.0: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sflt.s r4,r5 + CHECK_FLAG ("+inf < +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sflt.s r4,r5 + CHECK_FLAG ("-inf < -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sflt.s r4,r5 + CHECK_FLAG ("+inf < -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sflt.s r4,r5 + CHECK_FLAG ("-inf < +inf: ", TRUE) + + /* Less than with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 < +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sflt.s r4,r5 + CHECK_FLAG ("+NaN < +NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sflt.s r4,r5 + CHECK_FLAG ("-NaN < -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sflt.s r4,r5 + CHECK_FLAG ("+NaN < -NaN: ", FALSE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sflt.s r4,r5 + CHECK_FLAG ("-NaN < +NaN: ", FALSE) + + /* Less than with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 < 1.0 * 2^-129: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 < 1.0 * 2^-128: ", TRUE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 < 1.0 * 2^-129: ", FALSE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 < 1.0 * 2^-128: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL2) + LOAD_CONST (r5,FP_S_HUGE1) + lf.sflt.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-128 < 1.0 * 2^126: ", TRUE) + +/* ---------------------------------------------------------------------------- + * Test of single precision set flag if not equal: lf.sfne.s + * ------------------------------------------------------------------------- */ +_sfne_s: + LOAD_STR (r3, "lf.sfne.s\n") + l.jal _puts + l.nop + + /* Tests of integer inequality */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_ONE) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 != 1.0: ", FALSE) + + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_TWO) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 != 2.0: ", TRUE) + + /* Fractional inequality */ + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_1_5) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.5 != 1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_0_5) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.5 != 0.5: ", TRUE) + + /* Signed inequality */ + LOAD_CONST (r4,FP_S_N_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfne.s r4,r5 + CHECK_FLAG ("-1.5 != -1.5: ", FALSE) + + LOAD_CONST (r4,FP_S_1_5) + LOAD_CONST (r5,FP_S_N_1_5) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.5 != -1.5: ", TRUE) + + /* Inequality of zeros */ + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_P_ZERO) + lf.sfne.s r4,r5 + CHECK_FLAG ("+0.0 != +0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_N_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfne.s r4,r5 + CHECK_FLAG ("-0.0 != -0.0: ", FALSE) + + LOAD_CONST (r4,FP_S_P_ZERO) + LOAD_CONST (r5,FP_S_N_ZERO) + lf.sfne.s r4,r5 + CHECK_FLAG ("+0.0 != -0.0: ", FALSE) + + /* Inequality with infinities (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 != +inf: ", TRUE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_P_INF) + lf.sfne.s r4,r5 + CHECK_FLAG ("+inf != +inf: ", FALSE) + + LOAD_CONST (r4,FP_S_N_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfne.s r4,r5 + CHECK_FLAG ("-inf != -inf: ", FALSE) + + LOAD_CONST (r4,FP_S_P_INF) + LOAD_CONST (r5,FP_S_N_INF) + lf.sfne.s r4,r5 + CHECK_FLAG ("+inf != -inf: ", TRUE) + + /* Inequality with NaNs (more needed) */ + LOAD_CONST (r4,FP_S_ONE) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 != +NaN: ", TRUE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_P_NAN) + lf.sfne.s r4,r5 + CHECK_FLAG ("+NaN != +NaN: ", TRUE) + + LOAD_CONST (r4,FP_S_N_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfne.s r4,r5 + CHECK_FLAG ("-NaN != -NaN: ", TRUE) + + LOAD_CONST (r4,FP_S_P_NAN) + LOAD_CONST (r5,FP_S_N_NAN) + lf.sfne.s r4,r5 + CHECK_FLAG ("+NaN != -NaN: ", TRUE) + + /* Inequality with denormalized numbers (more needed) */ + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL1) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 != 1.0 * 2^-129: ", FALSE) + + LOAD_CONST (r4,FP_S_SMALL1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 * 2^-129 != 1.0 * 2^-128: ", TRUE) + + LOAD_CONST (r4,FP_S_HUGE1) + LOAD_CONST (r5,FP_S_SMALL2) + lf.sfne.s r4,r5 + CHECK_FLAG (" 1.0 * 2^126 != 1.0 * 2^-128: ", TRUE) + +/* ---------------------------------------------------------------------------- + * Test of single precision subtract: lf.sub.s + * ------------------------------------------------------------------------- */ + .section .text +_sub_s: + LOAD_STR (r3, "lf.sub.s\n") + l.jal _puts + l.nop + + /* Simple integer subtraction */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_ZERO) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - 0.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_ZERO) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -0.0 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - 1.0 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES (" 2.0 - 1.0 = 1.0: ", r4, FP_S_ONE) + + /* Fractional subtraction */ + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_1_5) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.5 - 1.5 = +0.0: ", r4, FP_S_P_ZERO) + + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_0_5) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.5 - 0.5 = 1.0: ", r4, FP_S_ONE) + + LOAD_CONST (r5,FP_S_1_5) + LOAD_CONST (r6,FP_S_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.5 - 1.5 = 0.5: ", r4, FP_S_0_5) + + /* Subtraction with negative numbers */ + LOAD_CONST (r5,FP_S_TWO) + LOAD_CONST (r6,FP_S_N_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES (" 2.0 - -1.0 = 3.0: ", r4, FP_S_THREE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_TWO) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -2.0 = 3.0: ", r4, FP_S_THREE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -1.0 = 2.0: ", r4, FP_S_TWO) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_TWO) + lf.sub.s r4,r5,r6 + CHECK_RES ("-1.0 - 2.0 = -3.0: ", r4, FP_S_N_THREE) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_TWO) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - 2.0 = -1.0: ", r4, FP_S_N_ONE) + + LOAD_CONST (r5,FP_S_N_ONE) + LOAD_CONST (r6,FP_S_N_ONE) + lf.sub.s r4,r5,r6 + CHECK_RES ("-1.0 - -1.0 = 0.0: ", r4, FP_S_P_ZERO) + + /* Subtraction with infinities (more needed) */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_INF) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - +inf = -inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_INF) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_P_INF) + lf.sub.s r4,r5,r6 + CHECK_RES ("+inf - +inf = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.sub.s r4,r5,r6 + CHECK_RES ("+inf - -inf = +inf: ", r4, FP_S_P_INF) + + LOAD_CONST (r5,FP_S_N_INF) + LOAD_CONST (r6,FP_S_N_INF) + lf.sub.s r4,r5,r6 + CHECK_RES ("-inf - -inf = -NaN: ", r4, FP_S_N_NAN) + + /* Subtraction with NaNs (more needed) */ + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_NAN) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -NaN = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_P_NAN) + lf.sub.s r4,r5,r6 + CHECK_RES ("+NaN - +NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_P_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.sub.s r4,r5,r6 + CHECK_RES ("+NaN - -NaN = +NaN: ", r4, FP_S_P_NAN) + + LOAD_CONST (r5,FP_S_N_NAN) + LOAD_CONST (r6,FP_S_N_NAN) + lf.sub.s r4,r5,r6 + CHECK_RES ("-NaN - -NaN = -NaN: ", r4, FP_S_N_NAN) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_P_NAN_B) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - +sNaN = +qNaN: ", r4, 0x7fc00001) + + LOAD_CONST (r5,FP_S_ONE) + LOAD_CONST (r6,FP_S_N_NAN_B) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 - -sNaN = -qNaN: ", r4, 0xffc00001) + + /* Subtraction with overflow (more neeeded) */ + LOAD_CONST (r5,FP_S_N_HUGE2) + LOAD_CONST (r6,FP_S_HUGE2) + lf.sub.s r4,r5,r6 + CHECK_RES ("-1.0 * 2^127 - 1.0 * 2^127 = +inf: ", r4, FP_S_N_INF) + + LOAD_CONST (r5,FP_S_HUGE2) + LOAD_CONST (r6,FP_S_N_HUGE2) + lf.sub.s r4,r5,r6 + CHECK_RES (" 1.0 * 2^127 - -1.0 * 2^127 = -inf: ", r4, FP_S_P_INF) + + +/* ---------------------------------------------------------------------------- + * All done + * ------------------------------------------------------------------------- */ +_exit: + LOAD_STR (r3, "Test completed\n") + l.jal _puts + l.nop + + l.movhi r3,hi(ALL_DONE) + l.ori r3,r3,lo(ALL_DONE) + l.nop NOP_REPORT /* Should be 0xdeaddead */ + + l.addi r3,r0,0 + l.nop NOP_EXIT
testsuite/test-code-or1k/fp/fp.S Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: testsuite/test-code-or1k/fp/Makefile.am =================================================================== --- testsuite/test-code-or1k/fp/Makefile.am (nonexistent) +++ testsuite/test-code-or1k/fp/Makefile.am (revision 104) @@ -0,0 +1,32 @@ +# Makefile.am for or1ksim testsuite CPU test program: fp + +# Copyright (C) Embecosm Limited, 2010 + +# Contributor Jeremy Bennett + +# This file is part of OpenRISC 1000 Architectural Simulator. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 3 of the License, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . */ + +# ----------------------------------------------------------------------------- +# This code is commented throughout for use with Doxygen. +# ----------------------------------------------------------------------------- + + +# A test program of the floating point instructions +check_PROGRAMS = fp + +fp_SOURCES = fp.S + +fp_LDFLAGS = -T$(srcdir)/../default.ld
testsuite/test-code-or1k/fp/Makefile.am Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: testsuite/test-code-or1k/ChangeLog =================================================================== --- testsuite/test-code-or1k/ChangeLog (revision 101) +++ testsuite/test-code-or1k/ChangeLog (revision 104) @@ -1,3 +1,24 @@ +2010-06-04 Jeremy Bennett + * configure: Regenerated. + * configure.ac: Added creation of lws-test makefile + * fp/fp.S (_puts): Fixed register usage. + * lws-test: Directory created. + * lws-test/lws-test.S: Created. + * lws-test/Makefile.am: Created. + * lws-test/Makefile.in: Generated. + * Makefile.am: Added lws-test directory + * Makefile.in: Regenerated. + +2010-06-02 Jeremy Bennett + * configure: Regenerated. + * configure.ac: Added creation of FP test makefile + * fp: Directory created. + * fp/fp.S: Created. + * fp/Makefile.am: Created. + * fp/Makefile.in: Generated. + * Makefile.am: Added FP test directory + * Makefile.in: Regenerated. + 2010-05-18 Jeremy Bennett * loop/loop-init.c (main): Initialize top of each memory block. * loop/loop-report.c (main): Rewritten to ensure reliable Index: testsuite/test-code-or1k/Makefile.am =================================================================== --- testsuite/test-code-or1k/Makefile.am (revision 101) +++ testsuite/test-code-or1k/Makefile.am (revision 104) @@ -53,6 +53,7 @@ exit \ ext \ fbtest \ + fp \ functest \ flag \ inst-set-test \ @@ -61,6 +62,7 @@ kbdtest \ local-global \ loop \ + lws-test \ mc-async \ mc-dram \ mc-ssram \ Index: testsuite/lib/or1ksim.exp =================================================================== --- testsuite/lib/or1ksim.exp (revision 101) +++ testsuite/lib/or1ksim.exp (revision 104) @@ -57,29 +57,76 @@ # Try each matchstr in turn, counting the lines for error reporting set match_line 0; + # The tests for Or1ksim are generally monolithic, with each line of output + # matched representing a pass. This is different to the tests for the + # library, which are each small and individual. foreach matchstr $match_list { set match_line [expr {$match_line + 1}]; -# send_user "matching |$matchstr|\n"; + # Each matchstring corresponds to a pass, unless its first character + # is '!', indicating a string which must match (without its '!'), but + # does not count towards the pass rate. + set first_ch [string index $matchstr 0] - expect { + if { $first_ch == "!" } { + # A line to ignore + set matchlen [string length $matchstr] + set last_index [expr {$matchlen - 1}] + set matchstr [string range $matchstr 1 $last_index] - $matchstr { - # String to match. Silently accept. Do first, so we can match - # specific warnings or errors if desired + if { $verbose > 2 } { + send_user "ignorning |$matchstr|\n"; } + } - -re "Warning" { - fail "$testname: warning: $expect_out(buffer)"; - return + if { $verbose > 2 } { + send_user "matching |$matchstr|\n"; + } + + # The matching is slightly tricky. In general we want to find warnings + # or errors. However expect will look at the entire buffer, so if we + # have the match string *after* an error or warning message, then the + # match will still work OK. + + # The trick is to do some post-processing of the matched buffer to see + # if there was a preceding Warning or ERROR message. + + expect { + -ex $matchstr { + set matchlen [string length $matchstr] + set buflen [string length $expect_out(buffer)] + set lastch [expr {$buflen - $matchlen}] + set prefix [string range $expect_out(buffer) 0 $lastch] + + if { [string match *ERROR* $prefix] } { + # We skipped an error + fail "$testname: ERROR seeking match line $match_line"; + return + } elseif { [string match *Warning* $prefix] } { + # We skipped a warning + fail "$testname: Warning seeking match line $match_line"; + return; + } elseif { $first_ch != "!" } { + # If we match we have a pass, unless we were asked to + # ignore. + pass "$testname: $matchstr" + } + # Everything else skip silently } - - -re "ERROR" { - fail "$testname: error: $expect_out(buffer)"; + + ERROR { + # An error other than the one we seek + fail "$testname: ERROR seeking match line $match_line"; return } - + + Warning { + # Any warning + fail "$testname: Warning seeking match line $match_line"; + return; + } + eof { fail "$testname: hit EOF seeking match line $match_line"; return @@ -86,6 +133,7 @@ } timeout { + perror "Timeout"; unresolved "$testname: timeout"; return } @@ -92,9 +140,8 @@ } } - # If we get here we've passed - pass $testname; - + # If we get here we've passed the whole test. No need to report anything + # else. } # Timeout 3 seconds is plenty as default
/testsuite/or1ksim.tests/cbasic.exp
45,6 → 45,6
"report(0x00000d7a);" \
"report(0x00000d7a);" \
"RESULT: 0xdeaddead" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "cbasic/cbasic"
/testsuite/or1ksim.tests/Makefile.in
228,6 → 228,8
ext.exp \
fbtest.exp \
flag.exp \
fp.cfg \
fp.exp \
functest.exp \
int-test.exp \
kbdtest.cfg \
234,6 → 236,7
kbdtest.exp \
kbdtest.rx \
local-global.exp \
lws-test.exp \
mem-test.exp \
mmu.cfg \
mmu.exp \
/testsuite/or1ksim.tests/tick.exp
45,6 → 45,6
"Test succeeded Continuous mode wrapped round" \
"Test succeeded Spurious interrupts handled with matching period" \
"Test succeeded Spurious interrupts handled after TTCR and TTMR" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "tick/tick"
/testsuite/or1ksim.tests/mem-test.exp
42,5 → 42,5
"report(0xddccbbaa);" \
"report(0xda25e544);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "mem-test/mem-test"
/testsuite/or1ksim.tests/functest.exp
25,17 → 25,18
 
 
# Run the Function parameter test.
run_or1ksim "functest" \
[list "0" \
"2" \
"4" \
"6" \
"8" \
"10" \
"12" \
"14" \
"16" \
"18" \
"report(0x00000014);" \
"exit(0)"] \
run_or1ksim "functest" \
[list "0" \
"2" \
"4" \
"6" \
"8" \
"10" \
"12" \
"14" \
"16" \
"18" \
"report(0x00000014);" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "functest/functest"
/testsuite/or1ksim.tests/kbdtest.exp
27,7 → 27,7
# Run the keyboard test. Note the need for double quoting of "backslash"
# characters.
run_or1ksim "kbdtest" \
[list "Reading from keyboard." \
[list "!Reading from keyboard." \
"Enabling interrupts." \
"Received 'T'" \
"Received 'e'" \
38,10 → 38,10
"Received '<'" \
"Received '/'" \
"Received '.'" \
"Received '\\\\'" \
"Received '\\'" \
"Received '|'" \
"Received '\"'" \
"Received '\\\''" \
"Received '\''" \
"Received '`'" \
"Received '}'" \
"Received ']'" \
54,6 → 54,6
"Received ')'" \
"Received '*'" \
"Received: ENTER" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"kbdtest.cfg" "kbdtest/kbdtest"
/testsuite/or1ksim.tests/ext.exp
130,6 → 130,6
"report(0x7fff7f7f);" \
"report(0x12345678);" \
"report(0x12345678);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "ext/ext"
/testsuite/or1ksim.tests/mycompress.exp
26,1012 → 26,1012
 
# Run the basic C functionality test.
run_or1ksim "mycompress" \
[list "main: bytes_out 3... hsize 5003" \
"main: hshift 4..." \
"main: bytes_out 3..." \
"main: hsize_reg 5003..." \
"main: before compress 1..." \
"main: compressing 1..." \
"main: compressing 2..." \
"main: compressing 3..." \
"main: compressing 4..." \
"main: compressing 5..." \
"main: compressing 6..." \
"main: compressing 7..." \
"main: compressing 8..." \
"main: compressing 9..." \
"main: compressing 10..." \
"main: compressing 11..." \
"main: compressing 12..." \
"main: compressing 13..." \
"main: compressing 14..." \
"main: compressing 15..." \
"main: compressing 16..." \
"main: compressing 17..." \
"main: compressing 18..." \
"main: compressing 19..." \
"main: compressing 20..." \
"main: compressing 21..." \
"main: compressing 22..." \
"main: compressing 23..." \
"main: compressing 24..." \
"main: compressing 25..." \
"main: compressing 26..." \
"main: compressing 27..." \
"main: compressing 28..." \
"main: compressing 29..." \
"main: compressing 30..." \
"main: compressing 31..." \
"main: compressing 32..." \
"main: compressing 33..." \
"main: compressing 34..." \
"main: compressing 35..." \
"main: compressing 36..." \
"main: compressing 37..." \
"main: compressing 38..." \
"main: compressing 39..." \
"main: compressing 40..." \
"main: compressing 41..." \
"main: compressing 42..." \
"main: compressing 43..." \
"main: compressing 44..." \
"main: compressing 45..." \
"main: compressing 46..." \
"main: compressing 47..." \
"main: compressing 48..." \
"main: compressing 49..." \
"main: compressing 50..." \
"main: compressing 51..." \
"main: compressing 52..." \
"main: compressing 53..." \
"main: compressing 54..." \
"main: compressing 55..." \
"main: compressing 56..." \
"main: compressing 57..." \
"main: compressing 58..." \
"main: compressing 59..." \
"main: compressing 60..." \
"main: compressing 61..." \
"main: compressing 62..." \
"main: compressing 63..." \
"main: compressing 64..." \
"main: compressing 65..." \
"main: compressing 66..." \
"main: compressing 67..." \
"main: compressing 68..." \
"main: compressing 69..." \
"main: compressing 70..." \
"main: compressing 71..." \
"main: compressing 72..." \
"main: compressing 73..." \
"main: compressing 74..." \
"main: compressing 75..." \
"main: compressing 76..." \
"main: compressing 77..." \
"main: compressing 78..." \
"main: compressing 79..." \
"main: compressing 80..." \
"main: compressing 81..." \
"main: compressing 82..." \
"main: compressing 83..." \
"main: compressing 84..." \
"main: compressing 85..." \
"main: compressing 86..." \
"main: compressing 87..." \
"main: compressing 88..." \
"main: compressing 89..." \
"main: compressing 90..." \
"main: compressing 91..." \
"main: compressing 92..." \
"main: compressing 93..." \
"main: compressing 94..." \
"main: compressing 95..." \
"main: compressing 96..." \
"main: compressing 97..." \
"main: compressing 98..." \
"main: compressing 99..." \
"main: compressing 100..." \
"main: compressing 101..." \
"main: compressing 102..." \
"main: compressing 103..." \
"main: compressing 104..." \
"main: compressing 105..." \
"main: compressing 106..." \
"main: compressing 107..." \
"main: compressing 108..." \
"main: compressing 109..." \
"main: compressing 110..." \
"main: compressing 111..." \
"main: compressing 112..." \
"main: compressing 113..." \
"main: compressing 114..." \
"main: compressing 115..." \
"main: compressing 116..." \
"main: compressing 117..." \
"main: compressing 118..." \
"main: compressing 119..." \
"main: compressing 120..." \
"main: compressing 121..." \
"main: compressing 122..." \
"main: compressing 123..." \
"main: compressing 124..." \
"main: compressing 125..." \
"main: compressing 126..." \
"main: compressing 127..." \
"main: compressing 128..." \
"main: compressing 129..." \
"main: compressing 130..." \
"main: compressing 131..." \
"main: compressing 132..." \
"main: compressing 133..." \
"main: compressing 134..." \
"main: compressing 135..." \
"main: compressing 136..." \
"main: compressing 137..." \
"main: compressing 138..." \
"main: compressing 139..." \
"main: compressing 140..." \
"main: compressing 141..." \
"main: compressing 142..." \
"main: compressing 143..." \
"main: compressing 144..." \
"main: compressing 145..." \
"main: compressing 146..." \
"main: compressing 147..." \
"main: compressing 148..." \
"main: compressing 149..." \
"main: compressing 150..." \
"main: compressing 151..." \
"main: compressing 152..." \
"main: compressing 153..." \
"main: compressing 154..." \
"main: compressing 155..." \
"main: compressing 156..." \
"main: compressing 157..." \
"main: compressing 158..." \
"main: compressing 159..." \
"main: compressing 160..." \
"main: compressing 161..." \
"main: compressing 162..." \
"main: compressing 163..." \
"main: compressing 164..." \
"main: compressing 165..." \
"main: compressing 166..." \
"main: compressing 167..." \
"main: compressing 168..." \
"main: compressing 169..." \
"main: compressing 170..." \
"main: compressing 171..." \
"main: compressing 172..." \
"main: compressing 173..." \
"main: compressing 174..." \
"main: compressing 175..." \
"main: compressing 176..." \
"main: compressing 177..." \
"main: compressing 178..." \
"main: compressing 179..." \
"main: compressing 180..." \
"main: compressing 181..." \
"main: compressing 182..." \
"main: compressing 183..." \
"main: compressing 184..." \
"main: compressing 185..." \
"main: compressing 186..." \
"main: compressing 187..." \
"main: compressing 188..." \
"main: compressing 189..." \
"main: compressing 190..." \
"main: compressing 191..." \
"main: compressing 192..." \
"main: compressing 193..." \
"main: compressing 194..." \
"main: compressing 195..." \
"main: compressing 196..." \
"main: compressing 197..." \
"main: compressing 198..." \
"main: compressing 199..." \
"main: compressing 200..." \
"main: compressing 201..." \
"main: compressing 202..." \
"main: compressing 203..." \
"main: compressing 204..." \
"main: compressing 205..." \
"main: compressing 206..." \
"main: compressing 207..." \
"main: compressing 208..." \
"main: compressing 209..." \
"main: compressing 210..." \
"main: compressing 211..." \
"main: compressing 212..." \
"main: compressing 213..." \
"main: compressing 214..." \
"main: compressing 215..." \
"main: compressing 216..." \
"main: compressing 217..." \
"main: compressing 218..." \
"main: compressing 219..." \
"main: compressing 220..." \
"main: compressing 221..." \
"main: compressing 222..." \
"main: compressing 223..." \
"main: compressing 224..." \
"main: compressing 225..." \
"main: compressing 226..." \
"main: compressing 227..." \
"main: compressing 228..." \
"main: compressing 229..." \
"main: compressing 230..." \
"main: compressing 231..." \
"main: compressing 232..." \
"main: compressing 233..." \
"main: compressing 234..." \
"main: compressing 235..." \
"main: compressing 236..." \
"main: compressing 237..." \
"main: compressing 238..." \
"main: compressing 239..." \
"main: compressing 240..." \
"main: compressing 241..." \
"main: compressing 242..." \
"main: compressing 243..." \
"main: compressing 244..." \
"main: compressing 245..." \
"main: compressing 246..." \
"main: compressing 247..." \
"main: compressing 248..." \
"main: compressing 249..." \
"main: compressing 250..." \
"main: compressing 251..." \
"main: compressing 252..." \
"main: compressing 253..." \
"main: compressing 254..." \
"main: compressing 255..." \
"main: compressing 256..." \
"main: compressing 257..." \
"main: compressing 258..." \
"main: compressing 259..." \
"main: compressing 260..." \
"main: compressing 261..." \
"main: compressing 262..." \
"main: compressing 263..." \
"main: compressing 264..." \
"main: compressing 265..." \
"main: compressing 266..." \
"main: compressing 267..." \
"main: compressing 268..." \
"main: compressing 269..." \
"main: compressing 270..." \
"main: compressing 271..." \
"main: compressing 272..." \
"main: compressing 273..." \
"main: compressing 274..." \
"main: compressing 275..." \
"main: compressing 276..." \
"main: compressing 277..." \
"main: compressing 278..." \
"main: compressing 279..." \
"main: compressing 280..." \
"main: compressing 281..." \
"main: compressing 282..." \
"main: compressing 283..." \
"main: compressing 284..." \
"main: compressing 285..." \
"main: compressing 286..." \
"main: compressing 287..." \
"main: compressing 288..." \
"main: compressing 289..." \
"main: compressing 290..." \
"main: compressing 291..." \
"main: compressing 292..." \
"main: compressing 293..." \
"main: compressing 294..." \
"main: compressing 295..." \
"main: compressing 296..." \
"main: compressing 297..." \
"main: compressing 298..." \
"main: compressing 299..." \
"main: compressing 300..." \
"main: compressing 301..." \
"main: compressing 302..." \
"main: compressing 303..." \
"main: compressing 304..." \
"main: compressing 305..." \
"main: compressing 306..." \
"main: compressing 307..." \
"main: compressing 308..." \
"main: compressing 309..." \
"main: compressing 310..." \
"main: compressing 311..." \
"main: compressing 312..." \
"main: compressing 313..." \
"main: compressing 314..." \
"main: compressing 315..." \
"main: compressing 316..." \
"main: compressing 317..." \
"main: compressing 318..." \
"main: compressing 319..." \
"main: compressing 320..." \
"main: compressing 321..." \
"main: compressing 322..." \
"main: compressing 323..." \
"main: compressing 324..." \
"main: compressing 325..." \
"main: compressing 326..." \
"main: compressing 327..." \
"main: compressing 328..." \
"main: compressing 329..." \
"main: compressing 330..." \
"main: compressing 331..." \
"main: compressing 332..." \
"main: compressing 333..." \
"main: compressing 334..." \
"main: compressing 335..." \
"main: compressing 336..." \
"main: compressing 337..." \
"main: compressing 338..." \
"main: compressing 339..." \
"main: compressing 340..." \
"main: compressing 341..." \
"main: compressing 342..." \
"main: compressing 343..." \
"main: compressing 344..." \
"main: compressing 345..." \
"main: compressing 346..." \
"main: compressing 347..." \
"main: compressing 348..." \
"main: compressing 349..." \
"main: compressing 350..." \
"main: compressing 351..." \
"main: compressing 352..." \
"main: compressing 353..." \
"main: compressing 354..." \
"main: compressing 355..." \
"main: compressing 356..." \
"main: compressing 357..." \
"main: compressing 358..." \
"main: compressing 359..." \
"main: compressing 360..." \
"main: compressing 361..." \
"main: compressing 362..." \
"main: compressing 363..." \
"main: compressing 364..." \
"main: compressing 365..." \
"main: compressing 366..." \
"main: compressing 367..." \
"main: compressing 368..." \
"main: compressing 369..." \
"main: compressing 370..." \
"main: compressing 371..." \
"main: compressing 372..." \
"main: compressing 373..." \
"main: compressing 374..." \
"main: compressing 375..." \
"main: compressing 376..." \
"main: compressing 377..." \
"main: compressing 378..." \
"main: compressing 379..." \
"main: compressing 380..." \
"main: compressing 381..." \
"main: compressing 382..." \
"main: compressing 383..." \
"main: compressing 384..." \
"main: compressing 385..." \
"main: compressing 386..." \
"main: compressing 387..." \
"main: compressing 388..." \
"main: compressing 389..." \
"main: compressing 390..." \
"main: compressing 391..." \
"main: compressing 392..." \
"main: compressing 393..." \
"main: compressing 394..." \
"main: compressing 395..." \
"main: compressing 396..." \
"main: compressing 397..." \
"main: compressing 398..." \
"main: compressing 399..." \
"main: compressing 400..." \
"main: compressing 401..." \
"main: compressing 402..." \
"main: compressing 403..." \
"main: compressing 404..." \
"main: compressing 405..." \
"main: compressing 406..." \
"main: compressing 407..." \
"main: compressing 408..." \
"main: compressing 409..." \
"main: compressing 410..." \
"main: compressing 411..." \
"main: compressing 412..." \
"main: compressing 413..." \
"main: compressing 414..." \
"main: compressing 415..." \
"main: compressing 416..." \
"main: compressing 417..." \
"main: compressing 418..." \
"main: compressing 419..." \
"main: compressing 420..." \
"main: compressing 421..." \
"main: compressing 422..." \
"main: compressing 423..." \
"main: compressing 424..." \
"main: compressing 425..." \
"main: compressing 426..." \
"main: compressing 427..." \
"main: compressing 428..." \
"main: compressing 429..." \
"main: compressing 430..." \
"main: compressing 431..." \
"main: compressing 432..." \
"main: compressing 433..." \
"main: compressing 434..." \
"main: compressing 435..." \
"main: compressing 436..." \
"main: compressing 437..." \
"main: compressing 438..." \
"main: compressing 439..." \
"main: compressing 440..." \
"main: compressing 441..." \
"main: compressing 442..." \
"main: compressing 443..." \
"main: compressing 444..." \
"main: compressing 445..." \
"main: compressing 446..." \
"main: compressing 447..." \
"main: compressing 448..." \
"main: compressing 449..." \
"main: compressing 450..." \
"main: compressing 451..." \
"main: compressing 452..." \
"main: compressing 453..." \
"main: compressing 454..." \
"main: compressing 455..." \
"main: compressing 456..." \
"main: compressing 457..." \
"main: compressing 458..." \
"main: compressing 459..." \
"main: compressing 460..." \
"main: compressing 461..." \
"main: compressing 462..." \
"main: compressing 463..." \
"main: compressing 464..." \
"main: compressing 465..." \
"main: compressing 466..." \
"main: compressing 467..." \
"main: compressing 468..." \
"main: compressing 469..." \
"main: compressing 470..." \
"main: compressing 471..." \
"main: compressing 472..." \
"main: compressing 473..." \
"main: compressing 474..." \
"main: compressing 475..." \
"main: compressing 476..." \
"main: compressing 477..." \
"main: compressing 478..." \
"main: compressing 479..." \
"main: compressing 480..." \
"main: compressing 481..." \
"main: compressing 482..." \
"main: compressing 483..." \
"main: compressing 484..." \
"main: compressing 485..." \
"main: compressing 486..." \
"main: compressing 487..." \
"main: compressing 488..." \
"main: compressing 489..." \
"main: compressing 490..." \
"main: compressing 491..." \
"main: compressing 492..." \
"main: compressing 493..." \
"main: compressing 494..." \
"main: compressing 495..." \
"main: compressing 496..." \
"main: compressing 497..." \
"main: compressing 498..." \
"main: compressing 499..." \
"main: compressing 500..." \
"main: compressing 501..." \
"main: compressing 502..." \
"main: compressing 503..." \
"main: compressing 504..." \
"main: compressing 505..." \
"main: compressing 506..." \
"main: compressing 507..." \
"main: compressing 508..." \
"main: compressing 509..." \
"main: compressing 510..." \
"main: compressing 511..." \
"main: compressing 512..." \
"main: compressing 513..." \
"main: compressing 514..." \
"main: compressing 515..." \
"main: compressing 516..." \
"main: compressing 517..." \
"main: compressing 518..." \
"main: compressing 519..." \
"main: compressing 520..." \
"main: compressing 521..." \
"main: compressing 522..." \
"main: compressing 523..." \
"main: compressing 524..." \
"main: compressing 525..." \
"main: compressing 526..." \
"main: compressing 527..." \
"main: compressing 528..." \
"main: compressing 529..." \
"main: compressing 530..." \
"main: compressing 531..." \
"main: compressing 532..." \
"main: compressing 533..." \
"main: compressing 534..." \
"main: compressing 535..." \
"main: compressing 536..." \
"main: compressing 537..." \
"main: compressing 538..." \
"main: compressing 539..." \
"main: compressing 540..." \
"main: compressing 541..." \
"main: compressing 542..." \
"main: compressing 543..." \
"main: compressing 544..." \
"main: compressing 545..." \
"main: compressing 546..." \
"main: compressing 547..." \
"main: compressing 548..." \
"main: compressing 549..." \
"main: compressing 550..." \
"main: compressing 551..." \
"main: compressing 552..." \
"main: compressing 553..." \
"main: compressing 554..." \
"main: compressing 555..." \
"main: compressing 556..." \
"main: compressing 557..." \
"main: compressing 558..." \
"main: compressing 559..." \
"main: compressing 560..." \
"main: compressing 561..." \
"main: compressing 562..." \
"main: compressing 563..." \
"main: compressing 564..." \
"main: compressing 565..." \
"main: compressing 566..." \
"main: compressing 567..." \
"main: compressing 568..." \
"main: compressing 569..." \
"main: compressing 570..." \
"main: compressing 571..." \
"main: compressing 572..." \
"main: compressing 573..." \
"main: compressing 574..." \
"main: compressing 575..." \
"main: compressing 576..." \
"main: compressing 577..." \
"main: compressing 578..." \
"main: compressing 579..." \
"main: compressing 580..." \
"main: compressing 581..." \
"main: compressing 582..." \
"main: compressing 583..." \
"main: compressing 584..." \
"main: compressing 585..." \
"main: compressing 586..." \
"main: compressing 587..." \
"main: compressing 588..." \
"main: compressing 589..." \
"main: compressing 590..." \
"main: compressing 591..." \
"main: compressing 592..." \
"main: compressing 593..." \
"main: compressing 594..." \
"main: compressing 595..." \
"main: compressing 596..." \
"main: compressing 597..." \
"main: compressing 598..." \
"main: compressing 599..." \
"main: compressing 600..." \
"main: compressing 601..." \
"main: compressing 602..." \
"main: compressing 603..." \
"main: compressing 604..." \
"main: compressing 605..." \
"main: compressing 606..." \
"main: compressing 607..." \
"main: compressing 608..." \
"main: compressing 609..." \
"main: compressing 610..." \
"main: compressing 611..." \
"main: compressing 612..." \
"main: compressing 613..." \
"main: compressing 614..." \
"main: compressing 615..." \
"main: compressing 616..." \
"main: compressing 617..." \
"main: compressing 618..." \
"main: compressing 619..." \
"main: compressing 620..." \
"main: compressing 621..." \
"main: compressing 622..." \
"main: compressing 623..." \
"main: compressing 624..." \
"main: compressing 625..." \
"main: compressing 626..." \
"main: compressing 627..." \
"main: compressing 628..." \
"main: compressing 629..." \
"main: compressing 630..." \
"main: compressing 631..." \
"main: compressing 632..." \
"main: compressing 633..." \
"main: compressing 634..." \
"main: compressing 635..." \
"main: compressing 636..." \
"main: compressing 637..." \
"main: compressing 638..." \
"main: compressing 639..." \
"main: compressing 640..." \
"main: compressing 641..." \
"main: compressing 642..." \
"main: compressing 643..." \
"main: compressing 644..." \
"main: compressing 645..." \
"main: compressing 646..." \
"main: compressing 647..." \
"main: compressing 648..." \
"main: compressing 649..." \
"main: compressing 650..." \
"main: compressing 651..." \
"main: compressing 652..." \
"main: compressing 653..." \
"main: compressing 654..." \
"main: compressing 655..." \
"main: compressing 656..." \
"main: compressing 657..." \
"main: compressing 658..." \
"main: compressing 659..." \
"main: compressing 660..." \
"main: compressing 661..." \
"main: compressing 662..." \
"main: compressing 663..." \
"main: compressing 664..." \
"main: compressing 665..." \
"main: compressing 666..." \
"main: compressing 667..." \
"main: compressing 668..." \
"main: compressing 669..." \
"main: compressing 670..." \
"main: compressing 671..." \
"main: compressing 672..." \
"main: compressing 673..." \
"main: compressing 674..." \
"main: compressing 675..." \
"main: compressing 676..." \
"main: compressing 677..." \
"main: compressing 678..." \
"main: compressing 679..." \
"main: compressing 680..." \
"main: compressing 681..." \
"main: compressing 682..." \
"main: compressing 683..." \
"main: compressing 684..." \
"main: compressing 685..." \
"main: compressing 686..." \
"main: compressing 687..." \
"main: compressing 688..." \
"main: compressing 689..." \
"main: compressing 690..." \
"main: compressing 691..." \
"main: compressing 692..." \
"main: compressing 693..." \
"main: compressing 694..." \
"main: compressing 695..." \
"main: compressing 696..." \
"main: compressing 697..." \
"main: compressing 698..." \
"main: compressing 699..." \
"main: compressing 700..." \
"main: compressing 701..." \
"main: compressing 702..." \
"main: compressing 703..." \
"main: compressing 704..." \
"main: compressing 705..." \
"main: compressing 706..." \
"main: compressing 707..." \
"main: compressing 708..." \
"main: compressing 709..." \
"main: compressing 710..." \
"main: compressing 711..." \
"main: compressing 712..." \
"main: compressing 713..." \
"main: compressing 714..." \
"main: compressing 715..." \
"main: compressing 716..." \
"main: compressing 717..." \
"main: compressing 718..." \
"main: compressing 719..." \
"main: compressing 720..." \
"main: compressing 721..." \
"main: compressing 722..." \
"main: compressing 723..." \
"main: compressing 724..." \
"main: compressing 725..." \
"main: compressing 726..." \
"main: compressing 727..." \
"main: compressing 728..." \
"main: compressing 729..." \
"main: compressing 730..." \
"main: compressing 731..." \
"main: compressing 732..." \
"main: compressing 733..." \
"main: compressing 734..." \
"main: compressing 735..." \
"main: compressing 736..." \
"main: compressing 737..." \
"main: compressing 738..." \
"main: compressing 739..." \
"main: compressing 740..." \
"main: compressing 741..." \
"main: compressing 742..." \
"main: compressing 743..." \
"main: compressing 744..." \
"main: compressing 745..." \
"main: compressing 746..." \
"main: compressing 747..." \
"main: compressing 748..." \
"main: compressing 749..." \
"main: compressing 750..." \
"main: compressing 751..." \
"main: compressing 752..." \
"main: compressing 753..." \
"main: compressing 754..." \
"main: compressing 755..." \
"main: compressing 756..." \
"main: compressing 757..." \
"main: compressing 758..." \
"main: compressing 759..." \
"main: compressing 760..." \
"main: compressing 761..." \
"main: compressing 762..." \
"main: compressing 763..." \
"main: compressing 764..." \
"main: compressing 765..." \
"main: compressing 766..." \
"main: compressing 767..." \
"main: compressing 768..." \
"main: compressing 769..." \
"main: compressing 770..." \
"main: compressing 771..." \
"main: compressing 772..." \
"main: compressing 773..." \
"main: compressing 774..." \
"main: compressing 775..." \
"main: compressing 776..." \
"main: compressing 777..." \
"main: compressing 778..." \
"main: compressing 779..." \
"main: compressing 780..." \
"main: compressing 781..." \
"main: compressing 782..." \
"main: compressing 783..." \
"main: compressing 784..." \
"main: compressing 785..." \
"main: compressing 786..." \
"main: compressing 787..." \
"main: compressing 788..." \
"main: compressing 789..." \
"main: compressing 790..." \
"main: compressing 791..." \
"main: compressing 792..." \
"main: compressing 793..." \
"main: compressing 794..." \
"main: compressing 795..." \
"main: compressing 796..." \
"main: compressing 797..." \
"main: compressing 798..." \
"main: compressing 799..." \
"main: compressing 800..." \
"main: compressing 801..." \
"main: compressing 802..." \
"main: compressing 803..." \
"main: compressing 804..." \
"main: compressing 805..." \
"main: compressing 806..." \
"main: compressing 807..." \
"main: compressing 808..." \
"main: compressing 809..." \
"main: compressing 810..." \
"main: compressing 811..." \
"main: compressing 812..." \
"main: compressing 813..." \
"main: compressing 814..." \
"main: compressing 815..." \
"main: compressing 816..." \
"main: compressing 817..." \
"main: compressing 818..." \
"main: compressing 819..." \
"main: compressing 820..." \
"main: compressing 821..." \
"main: compressing 822..." \
"main: compressing 823..." \
"main: compressing 824..." \
"main: compressing 825..." \
"main: compressing 826..." \
"main: compressing 827..." \
"main: compressing 828..." \
"main: compressing 829..." \
"main: compressing 830..." \
"main: compressing 831..." \
"main: compressing 832..." \
"main: compressing 833..." \
"main: compressing 834..." \
"main: compressing 835..." \
"main: compressing 836..." \
"main: compressing 837..." \
"main: compressing 838..." \
"main: compressing 839..." \
"main: compressing 840..." \
"main: compressing 841..." \
"main: compressing 842..." \
"main: compressing 843..." \
"main: compressing 844..." \
"main: compressing 845..." \
"main: compressing 846..." \
"main: compressing 847..." \
"main: compressing 848..." \
"main: compressing 849..." \
"main: compressing 850..." \
"main: compressing 851..." \
"main: compressing 852..." \
"main: compressing 853..." \
"main: compressing 854..." \
"main: compressing 855..." \
"main: compressing 856..." \
"main: compressing 857..." \
"main: compressing 858..." \
"main: compressing 859..." \
"main: compressing 860..." \
"main: compressing 861..." \
"main: compressing 862..." \
"main: compressing 863..." \
"main: compressing 864..." \
"main: compressing 865..." \
"main: compressing 866..." \
"main: compressing 867..." \
"main: compressing 868..." \
"main: compressing 869..." \
"main: compressing 870..." \
"main: compressing 871..." \
"main: compressing 872..." \
"main: compressing 873..." \
"main: compressing 874..." \
"main: compressing 875..." \
"main: compressing 876..." \
"main: compressing 877..." \
"main: compressing 878..." \
"main: compressing 879..." \
"main: compressing 880..." \
"main: compressing 881..." \
"main: compressing 882..." \
"main: compressing 883..." \
"main: compressing 884..." \
"main: compressing 885..." \
"main: compressing 886..." \
"main: compressing 887..." \
"main: compressing 888..." \
"main: compressing 889..." \
"main: compressing 890..." \
"main: compressing 891..." \
"main: compressing 892..." \
"main: compressing 893..." \
"main: compressing 894..." \
"main: compressing 895..." \
"main: compressing 896..." \
"main: compressing 897..." \
"main: compressing 898..." \
"main: compressing 899..." \
"main: compressing 900..." \
"main: compressing 901..." \
"main: compressing 902..." \
"main: compressing 903..." \
"main: compressing 904..." \
"main: compressing 905..." \
"main: compressing 906..." \
"main: compressing 907..." \
"main: compressing 908..." \
"main: compressing 909..." \
"main: compressing 910..." \
"main: compressing 911..." \
"main: compressing 912..." \
"main: compressing 913..." \
"main: compressing 914..." \
"main: compressing 915..." \
"main: compressing 916..." \
"main: compressing 917..." \
"main: compressing 918..." \
"main: compressing 919..." \
"main: compressing 920..." \
"main: compressing 921..." \
"main: compressing 922..." \
"main: compressing 923..." \
"main: compressing 924..." \
"main: compressing 925..." \
"main: compressing 926..." \
"main: compressing 927..." \
"main: compressing 928..." \
"main: compressing 929..." \
"main: compressing 930..." \
"main: compressing 931..." \
"main: compressing 932..." \
"main: compressing 933..." \
"main: compressing 934..." \
"main: compressing 935..." \
"main: compressing 936..." \
"main: compressing 937..." \
"main: compressing 938..." \
"main: compressing 939..." \
"main: compressing 940..." \
"main: compressing 941..." \
"main: compressing 942..." \
"main: compressing 943..." \
"main: compressing 944..." \
"main: compressing 945..." \
"main: compressing 946..." \
"main: compressing 947..." \
"main: compressing 948..." \
"main: compressing 949..." \
"main: compressing 950..." \
"main: compressing 951..." \
"main: compressing 952..." \
"main: compressing 953..." \
"main: compressing 954..." \
"main: compressing 955..." \
"main: compressing 956..." \
"main: compressing 957..." \
"main: compressing 958..." \
"main: compressing 959..." \
"main: compressing 960..." \
"main: compressing 961..." \
"main: compressing 962..." \
"main: compressing 963..." \
"main: compressing 964..." \
"main: compressing 965..." \
"main: compressing 966..." \
"main: compressing 967..." \
"main: compressing 968..." \
"main: compressing 969..." \
"main: compressing 970..." \
"main: compressing 971..." \
"main: compressing 972..." \
"main: compressing 973..." \
"main: compressing 974..." \
"main: compressing 975..." \
"main: compressing 976..." \
"main: compressing 977..." \
"main: compressing 978..." \
"main: compressing 979..." \
"main: compressing 980..." \
"main: compressing 981..." \
"main: compressing 982..." \
"main: compressing 983..." \
"main: compressing 984..." \
"main: compressing 985..." \
"main: compressing 986..." \
"main: compressing 987..." \
"main: compressing 988..." \
"main: compressing 989..." \
"main: compressing 990..." \
"main: compressing 991..." \
"main: compressing 992..." \
"main: compressing 993..." \
"main: compressing 994..." \
"main: compressing 995..." \
"main: compressing 996..." \
"main: compressing 997..." \
"main: compressing 998..." \
"main: compressing 999..." \
"main: output..." \
"main: end..." \
[list "!main: bytes_out 3... hsize 5003" \
"!main: hshift 4..." \
"!main: bytes_out 3..." \
"!main: hsize_reg 5003..." \
"!main: before compress 1..." \
"!main: compressing 1..." \
"!main: compressing 2..." \
"!main: compressing 3..." \
"!main: compressing 4..." \
"!main: compressing 5..." \
"!main: compressing 6..." \
"!main: compressing 7..." \
"!main: compressing 8..." \
"!main: compressing 9..." \
"!main: compressing 10..." \
"!main: compressing 11..." \
"!main: compressing 12..." \
"!main: compressing 13..." \
"!main: compressing 14..." \
"!main: compressing 15..." \
"!main: compressing 16..." \
"!main: compressing 17..." \
"!main: compressing 18..." \
"!main: compressing 19..." \
"!main: compressing 20..." \
"!main: compressing 21..." \
"!main: compressing 22..." \
"!main: compressing 23..." \
"!main: compressing 24..." \
"!main: compressing 25..." \
"!main: compressing 26..." \
"!main: compressing 27..." \
"!main: compressing 28..." \
"!main: compressing 29..." \
"!main: compressing 30..." \
"!main: compressing 31..." \
"!main: compressing 32..." \
"!main: compressing 33..." \
"!main: compressing 34..." \
"!main: compressing 35..." \
"!main: compressing 36..." \
"!main: compressing 37..." \
"!main: compressing 38..." \
"!main: compressing 39..." \
"!main: compressing 40..." \
"!main: compressing 41..." \
"!main: compressing 42..." \
"!main: compressing 43..." \
"!main: compressing 44..." \
"!main: compressing 45..." \
"!main: compressing 46..." \
"!main: compressing 47..." \
"!main: compressing 48..." \
"!main: compressing 49..." \
"!main: compressing 50..." \
"!main: compressing 51..." \
"!main: compressing 52..." \
"!main: compressing 53..." \
"!main: compressing 54..." \
"!main: compressing 55..." \
"!main: compressing 56..." \
"!main: compressing 57..." \
"!main: compressing 58..." \
"!main: compressing 59..." \
"!main: compressing 60..." \
"!main: compressing 61..." \
"!main: compressing 62..." \
"!main: compressing 63..." \
"!main: compressing 64..." \
"!main: compressing 65..." \
"!main: compressing 66..." \
"!main: compressing 67..." \
"!main: compressing 68..." \
"!main: compressing 69..." \
"!main: compressing 70..." \
"!main: compressing 71..." \
"!main: compressing 72..." \
"!main: compressing 73..." \
"!main: compressing 74..." \
"!main: compressing 75..." \
"!main: compressing 76..." \
"!main: compressing 77..." \
"!main: compressing 78..." \
"!main: compressing 79..." \
"!main: compressing 80..." \
"!main: compressing 81..." \
"!main: compressing 82..." \
"!main: compressing 83..." \
"!main: compressing 84..." \
"!main: compressing 85..." \
"!main: compressing 86..." \
"!main: compressing 87..." \
"!main: compressing 88..." \
"!main: compressing 89..." \
"!main: compressing 90..." \
"!main: compressing 91..." \
"!main: compressing 92..." \
"!main: compressing 93..." \
"!main: compressing 94..." \
"!main: compressing 95..." \
"!main: compressing 96..." \
"!main: compressing 97..." \
"!main: compressing 98..." \
"!main: compressing 99..." \
"!main: compressing 100..." \
"!main: compressing 101..." \
"!main: compressing 102..." \
"!main: compressing 103..." \
"!main: compressing 104..." \
"!main: compressing 105..." \
"!main: compressing 106..." \
"!main: compressing 107..." \
"!main: compressing 108..." \
"!main: compressing 109..." \
"!main: compressing 110..." \
"!main: compressing 111..." \
"!main: compressing 112..." \
"!main: compressing 113..." \
"!main: compressing 114..." \
"!main: compressing 115..." \
"!main: compressing 116..." \
"!main: compressing 117..." \
"!main: compressing 118..." \
"!main: compressing 119..." \
"!main: compressing 120..." \
"!main: compressing 121..." \
"!main: compressing 122..." \
"!main: compressing 123..." \
"!main: compressing 124..." \
"!main: compressing 125..." \
"!main: compressing 126..." \
"!main: compressing 127..." \
"!main: compressing 128..." \
"!main: compressing 129..." \
"!main: compressing 130..." \
"!main: compressing 131..." \
"!main: compressing 132..." \
"!main: compressing 133..." \
"!main: compressing 134..." \
"!main: compressing 135..." \
"!main: compressing 136..." \
"!main: compressing 137..." \
"!main: compressing 138..." \
"!main: compressing 139..." \
"!main: compressing 140..." \
"!main: compressing 141..." \
"!main: compressing 142..." \
"!main: compressing 143..." \
"!main: compressing 144..." \
"!main: compressing 145..." \
"!main: compressing 146..." \
"!main: compressing 147..." \
"!main: compressing 148..." \
"!main: compressing 149..." \
"!main: compressing 150..." \
"!main: compressing 151..." \
"!main: compressing 152..." \
"!main: compressing 153..." \
"!main: compressing 154..." \
"!main: compressing 155..." \
"!main: compressing 156..." \
"!main: compressing 157..." \
"!main: compressing 158..." \
"!main: compressing 159..." \
"!main: compressing 160..." \
"!main: compressing 161..." \
"!main: compressing 162..." \
"!main: compressing 163..." \
"!main: compressing 164..." \
"!main: compressing 165..." \
"!main: compressing 166..." \
"!main: compressing 167..." \
"!main: compressing 168..." \
"!main: compressing 169..." \
"!main: compressing 170..." \
"!main: compressing 171..." \
"!main: compressing 172..." \
"!main: compressing 173..." \
"!main: compressing 174..." \
"!main: compressing 175..." \
"!main: compressing 176..." \
"!main: compressing 177..." \
"!main: compressing 178..." \
"!main: compressing 179..." \
"!main: compressing 180..." \
"!main: compressing 181..." \
"!main: compressing 182..." \
"!main: compressing 183..." \
"!main: compressing 184..." \
"!main: compressing 185..." \
"!main: compressing 186..." \
"!main: compressing 187..." \
"!main: compressing 188..." \
"!main: compressing 189..." \
"!main: compressing 190..." \
"!main: compressing 191..." \
"!main: compressing 192..." \
"!main: compressing 193..." \
"!main: compressing 194..." \
"!main: compressing 195..." \
"!main: compressing 196..." \
"!main: compressing 197..." \
"!main: compressing 198..." \
"!main: compressing 199..." \
"!main: compressing 200..." \
"!main: compressing 201..." \
"!main: compressing 202..." \
"!main: compressing 203..." \
"!main: compressing 204..." \
"!main: compressing 205..." \
"!main: compressing 206..." \
"!main: compressing 207..." \
"!main: compressing 208..." \
"!main: compressing 209..." \
"!main: compressing 210..." \
"!main: compressing 211..." \
"!main: compressing 212..." \
"!main: compressing 213..." \
"!main: compressing 214..." \
"!main: compressing 215..." \
"!main: compressing 216..." \
"!main: compressing 217..." \
"!main: compressing 218..." \
"!main: compressing 219..." \
"!main: compressing 220..." \
"!main: compressing 221..." \
"!main: compressing 222..." \
"!main: compressing 223..." \
"!main: compressing 224..." \
"!main: compressing 225..." \
"!main: compressing 226..." \
"!main: compressing 227..." \
"!main: compressing 228..." \
"!main: compressing 229..." \
"!main: compressing 230..." \
"!main: compressing 231..." \
"!main: compressing 232..." \
"!main: compressing 233..." \
"!main: compressing 234..." \
"!main: compressing 235..." \
"!main: compressing 236..." \
"!main: compressing 237..." \
"!main: compressing 238..." \
"!main: compressing 239..." \
"!main: compressing 240..." \
"!main: compressing 241..." \
"!main: compressing 242..." \
"!main: compressing 243..." \
"!main: compressing 244..." \
"!main: compressing 245..." \
"!main: compressing 246..." \
"!main: compressing 247..." \
"!main: compressing 248..." \
"!main: compressing 249..." \
"!main: compressing 250..." \
"!main: compressing 251..." \
"!main: compressing 252..." \
"!main: compressing 253..." \
"!main: compressing 254..." \
"!main: compressing 255..." \
"!main: compressing 256..." \
"!main: compressing 257..." \
"!main: compressing 258..." \
"!main: compressing 259..." \
"!main: compressing 260..." \
"!main: compressing 261..." \
"!main: compressing 262..." \
"!main: compressing 263..." \
"!main: compressing 264..." \
"!main: compressing 265..." \
"!main: compressing 266..." \
"!main: compressing 267..." \
"!main: compressing 268..." \
"!main: compressing 269..." \
"!main: compressing 270..." \
"!main: compressing 271..." \
"!main: compressing 272..." \
"!main: compressing 273..." \
"!main: compressing 274..." \
"!main: compressing 275..." \
"!main: compressing 276..." \
"!main: compressing 277..." \
"!main: compressing 278..." \
"!main: compressing 279..." \
"!main: compressing 280..." \
"!main: compressing 281..." \
"!main: compressing 282..." \
"!main: compressing 283..." \
"!main: compressing 284..." \
"!main: compressing 285..." \
"!main: compressing 286..." \
"!main: compressing 287..." \
"!main: compressing 288..." \
"!main: compressing 289..." \
"!main: compressing 290..." \
"!main: compressing 291..." \
"!main: compressing 292..." \
"!main: compressing 293..." \
"!main: compressing 294..." \
"!main: compressing 295..." \
"!main: compressing 296..." \
"!main: compressing 297..." \
"!main: compressing 298..." \
"!main: compressing 299..." \
"!main: compressing 300..." \
"!main: compressing 301..." \
"!main: compressing 302..." \
"!main: compressing 303..." \
"!main: compressing 304..." \
"!main: compressing 305..." \
"!main: compressing 306..." \
"!main: compressing 307..." \
"!main: compressing 308..." \
"!main: compressing 309..." \
"!main: compressing 310..." \
"!main: compressing 311..." \
"!main: compressing 312..." \
"!main: compressing 313..." \
"!main: compressing 314..." \
"!main: compressing 315..." \
"!main: compressing 316..." \
"!main: compressing 317..." \
"!main: compressing 318..." \
"!main: compressing 319..." \
"!main: compressing 320..." \
"!main: compressing 321..." \
"!main: compressing 322..." \
"!main: compressing 323..." \
"!main: compressing 324..." \
"!main: compressing 325..." \
"!main: compressing 326..." \
"!main: compressing 327..." \
"!main: compressing 328..." \
"!main: compressing 329..." \
"!main: compressing 330..." \
"!main: compressing 331..." \
"!main: compressing 332..." \
"!main: compressing 333..." \
"!main: compressing 334..." \
"!main: compressing 335..." \
"!main: compressing 336..." \
"!main: compressing 337..." \
"!main: compressing 338..." \
"!main: compressing 339..." \
"!main: compressing 340..." \
"!main: compressing 341..." \
"!main: compressing 342..." \
"!main: compressing 343..." \
"!main: compressing 344..." \
"!main: compressing 345..." \
"!main: compressing 346..." \
"!main: compressing 347..." \
"!main: compressing 348..." \
"!main: compressing 349..." \
"!main: compressing 350..." \
"!main: compressing 351..." \
"!main: compressing 352..." \
"!main: compressing 353..." \
"!main: compressing 354..." \
"!main: compressing 355..." \
"!main: compressing 356..." \
"!main: compressing 357..." \
"!main: compressing 358..." \
"!main: compressing 359..." \
"!main: compressing 360..." \
"!main: compressing 361..." \
"!main: compressing 362..." \
"!main: compressing 363..." \
"!main: compressing 364..." \
"!main: compressing 365..." \
"!main: compressing 366..." \
"!main: compressing 367..." \
"!main: compressing 368..." \
"!main: compressing 369..." \
"!main: compressing 370..." \
"!main: compressing 371..." \
"!main: compressing 372..." \
"!main: compressing 373..." \
"!main: compressing 374..." \
"!main: compressing 375..." \
"!main: compressing 376..." \
"!main: compressing 377..." \
"!main: compressing 378..." \
"!main: compressing 379..." \
"!main: compressing 380..." \
"!main: compressing 381..." \
"!main: compressing 382..." \
"!main: compressing 383..." \
"!main: compressing 384..." \
"!main: compressing 385..." \
"!main: compressing 386..." \
"!main: compressing 387..." \
"!main: compressing 388..." \
"!main: compressing 389..." \
"!main: compressing 390..." \
"!main: compressing 391..." \
"!main: compressing 392..." \
"!main: compressing 393..." \
"!main: compressing 394..." \
"!main: compressing 395..." \
"!main: compressing 396..." \
"!main: compressing 397..." \
"!main: compressing 398..." \
"!main: compressing 399..." \
"!main: compressing 400..." \
"!main: compressing 401..." \
"!main: compressing 402..." \
"!main: compressing 403..." \
"!main: compressing 404..." \
"!main: compressing 405..." \
"!main: compressing 406..." \
"!main: compressing 407..." \
"!main: compressing 408..." \
"!main: compressing 409..." \
"!main: compressing 410..." \
"!main: compressing 411..." \
"!main: compressing 412..." \
"!main: compressing 413..." \
"!main: compressing 414..." \
"!main: compressing 415..." \
"!main: compressing 416..." \
"!main: compressing 417..." \
"!main: compressing 418..." \
"!main: compressing 419..." \
"!main: compressing 420..." \
"!main: compressing 421..." \
"!main: compressing 422..." \
"!main: compressing 423..." \
"!main: compressing 424..." \
"!main: compressing 425..." \
"!main: compressing 426..." \
"!main: compressing 427..." \
"!main: compressing 428..." \
"!main: compressing 429..." \
"!main: compressing 430..." \
"!main: compressing 431..." \
"!main: compressing 432..." \
"!main: compressing 433..." \
"!main: compressing 434..." \
"!main: compressing 435..." \
"!main: compressing 436..." \
"!main: compressing 437..." \
"!main: compressing 438..." \
"!main: compressing 439..." \
"!main: compressing 440..." \
"!main: compressing 441..." \
"!main: compressing 442..." \
"!main: compressing 443..." \
"!main: compressing 444..." \
"!main: compressing 445..." \
"!main: compressing 446..." \
"!main: compressing 447..." \
"!main: compressing 448..." \
"!main: compressing 449..." \
"!main: compressing 450..." \
"!main: compressing 451..." \
"!main: compressing 452..." \
"!main: compressing 453..." \
"!main: compressing 454..." \
"!main: compressing 455..." \
"!main: compressing 456..." \
"!main: compressing 457..." \
"!main: compressing 458..." \
"!main: compressing 459..." \
"!main: compressing 460..." \
"!main: compressing 461..." \
"!main: compressing 462..." \
"!main: compressing 463..." \
"!main: compressing 464..." \
"!main: compressing 465..." \
"!main: compressing 466..." \
"!main: compressing 467..." \
"!main: compressing 468..." \
"!main: compressing 469..." \
"!main: compressing 470..." \
"!main: compressing 471..." \
"!main: compressing 472..." \
"!main: compressing 473..." \
"!main: compressing 474..." \
"!main: compressing 475..." \
"!main: compressing 476..." \
"!main: compressing 477..." \
"!main: compressing 478..." \
"!main: compressing 479..." \
"!main: compressing 480..." \
"!main: compressing 481..." \
"!main: compressing 482..." \
"!main: compressing 483..." \
"!main: compressing 484..." \
"!main: compressing 485..." \
"!main: compressing 486..." \
"!main: compressing 487..." \
"!main: compressing 488..." \
"!main: compressing 489..." \
"!main: compressing 490..." \
"!main: compressing 491..." \
"!main: compressing 492..." \
"!main: compressing 493..." \
"!main: compressing 494..." \
"!main: compressing 495..." \
"!main: compressing 496..." \
"!main: compressing 497..." \
"!main: compressing 498..." \
"!main: compressing 499..." \
"!main: compressing 500..." \
"!main: compressing 501..." \
"!main: compressing 502..." \
"!main: compressing 503..." \
"!main: compressing 504..." \
"!main: compressing 505..." \
"!main: compressing 506..." \
"!main: compressing 507..." \
"!main: compressing 508..." \
"!main: compressing 509..." \
"!main: compressing 510..." \
"!main: compressing 511..." \
"!main: compressing 512..." \
"!main: compressing 513..." \
"!main: compressing 514..." \
"!main: compressing 515..." \
"!main: compressing 516..." \
"!main: compressing 517..." \
"!main: compressing 518..." \
"!main: compressing 519..." \
"!main: compressing 520..." \
"!main: compressing 521..." \
"!main: compressing 522..." \
"!main: compressing 523..." \
"!main: compressing 524..." \
"!main: compressing 525..." \
"!main: compressing 526..." \
"!main: compressing 527..." \
"!main: compressing 528..." \
"!main: compressing 529..." \
"!main: compressing 530..." \
"!main: compressing 531..." \
"!main: compressing 532..." \
"!main: compressing 533..." \
"!main: compressing 534..." \
"!main: compressing 535..." \
"!main: compressing 536..." \
"!main: compressing 537..." \
"!main: compressing 538..." \
"!main: compressing 539..." \
"!main: compressing 540..." \
"!main: compressing 541..." \
"!main: compressing 542..." \
"!main: compressing 543..." \
"!main: compressing 544..." \
"!main: compressing 545..." \
"!main: compressing 546..." \
"!main: compressing 547..." \
"!main: compressing 548..." \
"!main: compressing 549..." \
"!main: compressing 550..." \
"!main: compressing 551..." \
"!main: compressing 552..." \
"!main: compressing 553..." \
"!main: compressing 554..." \
"!main: compressing 555..." \
"!main: compressing 556..." \
"!main: compressing 557..." \
"!main: compressing 558..." \
"!main: compressing 559..." \
"!main: compressing 560..." \
"!main: compressing 561..." \
"!main: compressing 562..." \
"!main: compressing 563..." \
"!main: compressing 564..." \
"!main: compressing 565..." \
"!main: compressing 566..." \
"!main: compressing 567..." \
"!main: compressing 568..." \
"!main: compressing 569..." \
"!main: compressing 570..." \
"!main: compressing 571..." \
"!main: compressing 572..." \
"!main: compressing 573..." \
"!main: compressing 574..." \
"!main: compressing 575..." \
"!main: compressing 576..." \
"!main: compressing 577..." \
"!main: compressing 578..." \
"!main: compressing 579..." \
"!main: compressing 580..." \
"!main: compressing 581..." \
"!main: compressing 582..." \
"!main: compressing 583..." \
"!main: compressing 584..." \
"!main: compressing 585..." \
"!main: compressing 586..." \
"!main: compressing 587..." \
"!main: compressing 588..." \
"!main: compressing 589..." \
"!main: compressing 590..." \
"!main: compressing 591..." \
"!main: compressing 592..." \
"!main: compressing 593..." \
"!main: compressing 594..." \
"!main: compressing 595..." \
"!main: compressing 596..." \
"!main: compressing 597..." \
"!main: compressing 598..." \
"!main: compressing 599..." \
"!main: compressing 600..." \
"!main: compressing 601..." \
"!main: compressing 602..." \
"!main: compressing 603..." \
"!main: compressing 604..." \
"!main: compressing 605..." \
"!main: compressing 606..." \
"!main: compressing 607..." \
"!main: compressing 608..." \
"!main: compressing 609..." \
"!main: compressing 610..." \
"!main: compressing 611..." \
"!main: compressing 612..." \
"!main: compressing 613..." \
"!main: compressing 614..." \
"!main: compressing 615..." \
"!main: compressing 616..." \
"!main: compressing 617..." \
"!main: compressing 618..." \
"!main: compressing 619..." \
"!main: compressing 620..." \
"!main: compressing 621..." \
"!main: compressing 622..." \
"!main: compressing 623..." \
"!main: compressing 624..." \
"!main: compressing 625..." \
"!main: compressing 626..." \
"!main: compressing 627..." \
"!main: compressing 628..." \
"!main: compressing 629..." \
"!main: compressing 630..." \
"!main: compressing 631..." \
"!main: compressing 632..." \
"!main: compressing 633..." \
"!main: compressing 634..." \
"!main: compressing 635..." \
"!main: compressing 636..." \
"!main: compressing 637..." \
"!main: compressing 638..." \
"!main: compressing 639..." \
"!main: compressing 640..." \
"!main: compressing 641..." \
"!main: compressing 642..." \
"!main: compressing 643..." \
"!main: compressing 644..." \
"!main: compressing 645..." \
"!main: compressing 646..." \
"!main: compressing 647..." \
"!main: compressing 648..." \
"!main: compressing 649..." \
"!main: compressing 650..." \
"!main: compressing 651..." \
"!main: compressing 652..." \
"!main: compressing 653..." \
"!main: compressing 654..." \
"!main: compressing 655..." \
"!main: compressing 656..." \
"!main: compressing 657..." \
"!main: compressing 658..." \
"!main: compressing 659..." \
"!main: compressing 660..." \
"!main: compressing 661..." \
"!main: compressing 662..." \
"!main: compressing 663..." \
"!main: compressing 664..." \
"!main: compressing 665..." \
"!main: compressing 666..." \
"!main: compressing 667..." \
"!main: compressing 668..." \
"!main: compressing 669..." \
"!main: compressing 670..." \
"!main: compressing 671..." \
"!main: compressing 672..." \
"!main: compressing 673..." \
"!main: compressing 674..." \
"!main: compressing 675..." \
"!main: compressing 676..." \
"!main: compressing 677..." \
"!main: compressing 678..." \
"!main: compressing 679..." \
"!main: compressing 680..." \
"!main: compressing 681..." \
"!main: compressing 682..." \
"!main: compressing 683..." \
"!main: compressing 684..." \
"!main: compressing 685..." \
"!main: compressing 686..." \
"!main: compressing 687..." \
"!main: compressing 688..." \
"!main: compressing 689..." \
"!main: compressing 690..." \
"!main: compressing 691..." \
"!main: compressing 692..." \
"!main: compressing 693..." \
"!main: compressing 694..." \
"!main: compressing 695..." \
"!main: compressing 696..." \
"!main: compressing 697..." \
"!main: compressing 698..." \
"!main: compressing 699..." \
"!main: compressing 700..." \
"!main: compressing 701..." \
"!main: compressing 702..." \
"!main: compressing 703..." \
"!main: compressing 704..." \
"!main: compressing 705..." \
"!main: compressing 706..." \
"!main: compressing 707..." \
"!main: compressing 708..." \
"!main: compressing 709..." \
"!main: compressing 710..." \
"!main: compressing 711..." \
"!main: compressing 712..." \
"!main: compressing 713..." \
"!main: compressing 714..." \
"!main: compressing 715..." \
"!main: compressing 716..." \
"!main: compressing 717..." \
"!main: compressing 718..." \
"!main: compressing 719..." \
"!main: compressing 720..." \
"!main: compressing 721..." \
"!main: compressing 722..." \
"!main: compressing 723..." \
"!main: compressing 724..." \
"!main: compressing 725..." \
"!main: compressing 726..." \
"!main: compressing 727..." \
"!main: compressing 728..." \
"!main: compressing 729..." \
"!main: compressing 730..." \
"!main: compressing 731..." \
"!main: compressing 732..." \
"!main: compressing 733..." \
"!main: compressing 734..." \
"!main: compressing 735..." \
"!main: compressing 736..." \
"!main: compressing 737..." \
"!main: compressing 738..." \
"!main: compressing 739..." \
"!main: compressing 740..." \
"!main: compressing 741..." \
"!main: compressing 742..." \
"!main: compressing 743..." \
"!main: compressing 744..." \
"!main: compressing 745..." \
"!main: compressing 746..." \
"!main: compressing 747..." \
"!main: compressing 748..." \
"!main: compressing 749..." \
"!main: compressing 750..." \
"!main: compressing 751..." \
"!main: compressing 752..." \
"!main: compressing 753..." \
"!main: compressing 754..." \
"!main: compressing 755..." \
"!main: compressing 756..." \
"!main: compressing 757..." \
"!main: compressing 758..." \
"!main: compressing 759..." \
"!main: compressing 760..." \
"!main: compressing 761..." \
"!main: compressing 762..." \
"!main: compressing 763..." \
"!main: compressing 764..." \
"!main: compressing 765..." \
"!main: compressing 766..." \
"!main: compressing 767..." \
"!main: compressing 768..." \
"!main: compressing 769..." \
"!main: compressing 770..." \
"!main: compressing 771..." \
"!main: compressing 772..." \
"!main: compressing 773..." \
"!main: compressing 774..." \
"!main: compressing 775..." \
"!main: compressing 776..." \
"!main: compressing 777..." \
"!main: compressing 778..." \
"!main: compressing 779..." \
"!main: compressing 780..." \
"!main: compressing 781..." \
"!main: compressing 782..." \
"!main: compressing 783..." \
"!main: compressing 784..." \
"!main: compressing 785..." \
"!main: compressing 786..." \
"!main: compressing 787..." \
"!main: compressing 788..." \
"!main: compressing 789..." \
"!main: compressing 790..." \
"!main: compressing 791..." \
"!main: compressing 792..." \
"!main: compressing 793..." \
"!main: compressing 794..." \
"!main: compressing 795..." \
"!main: compressing 796..." \
"!main: compressing 797..." \
"!main: compressing 798..." \
"!main: compressing 799..." \
"!main: compressing 800..." \
"!main: compressing 801..." \
"!main: compressing 802..." \
"!main: compressing 803..." \
"!main: compressing 804..." \
"!main: compressing 805..." \
"!main: compressing 806..." \
"!main: compressing 807..." \
"!main: compressing 808..." \
"!main: compressing 809..." \
"!main: compressing 810..." \
"!main: compressing 811..." \
"!main: compressing 812..." \
"!main: compressing 813..." \
"!main: compressing 814..." \
"!main: compressing 815..." \
"!main: compressing 816..." \
"!main: compressing 817..." \
"!main: compressing 818..." \
"!main: compressing 819..." \
"!main: compressing 820..." \
"!main: compressing 821..." \
"!main: compressing 822..." \
"!main: compressing 823..." \
"!main: compressing 824..." \
"!main: compressing 825..." \
"!main: compressing 826..." \
"!main: compressing 827..." \
"!main: compressing 828..." \
"!main: compressing 829..." \
"!main: compressing 830..." \
"!main: compressing 831..." \
"!main: compressing 832..." \
"!main: compressing 833..." \
"!main: compressing 834..." \
"!main: compressing 835..." \
"!main: compressing 836..." \
"!main: compressing 837..." \
"!main: compressing 838..." \
"!main: compressing 839..." \
"!main: compressing 840..." \
"!main: compressing 841..." \
"!main: compressing 842..." \
"!main: compressing 843..." \
"!main: compressing 844..." \
"!main: compressing 845..." \
"!main: compressing 846..." \
"!main: compressing 847..." \
"!main: compressing 848..." \
"!main: compressing 849..." \
"!main: compressing 850..." \
"!main: compressing 851..." \
"!main: compressing 852..." \
"!main: compressing 853..." \
"!main: compressing 854..." \
"!main: compressing 855..." \
"!main: compressing 856..." \
"!main: compressing 857..." \
"!main: compressing 858..." \
"!main: compressing 859..." \
"!main: compressing 860..." \
"!main: compressing 861..." \
"!main: compressing 862..." \
"!main: compressing 863..." \
"!main: compressing 864..." \
"!main: compressing 865..." \
"!main: compressing 866..." \
"!main: compressing 867..." \
"!main: compressing 868..." \
"!main: compressing 869..." \
"!main: compressing 870..." \
"!main: compressing 871..." \
"!main: compressing 872..." \
"!main: compressing 873..." \
"!main: compressing 874..." \
"!main: compressing 875..." \
"!main: compressing 876..." \
"!main: compressing 877..." \
"!main: compressing 878..." \
"!main: compressing 879..." \
"!main: compressing 880..." \
"!main: compressing 881..." \
"!main: compressing 882..." \
"!main: compressing 883..." \
"!main: compressing 884..." \
"!main: compressing 885..." \
"!main: compressing 886..." \
"!main: compressing 887..." \
"!main: compressing 888..." \
"!main: compressing 889..." \
"!main: compressing 890..." \
"!main: compressing 891..." \
"!main: compressing 892..." \
"!main: compressing 893..." \
"!main: compressing 894..." \
"!main: compressing 895..." \
"!main: compressing 896..." \
"!main: compressing 897..." \
"!main: compressing 898..." \
"!main: compressing 899..." \
"!main: compressing 900..." \
"!main: compressing 901..." \
"!main: compressing 902..." \
"!main: compressing 903..." \
"!main: compressing 904..." \
"!main: compressing 905..." \
"!main: compressing 906..." \
"!main: compressing 907..." \
"!main: compressing 908..." \
"!main: compressing 909..." \
"!main: compressing 910..." \
"!main: compressing 911..." \
"!main: compressing 912..." \
"!main: compressing 913..." \
"!main: compressing 914..." \
"!main: compressing 915..." \
"!main: compressing 916..." \
"!main: compressing 917..." \
"!main: compressing 918..." \
"!main: compressing 919..." \
"!main: compressing 920..." \
"!main: compressing 921..." \
"!main: compressing 922..." \
"!main: compressing 923..." \
"!main: compressing 924..." \
"!main: compressing 925..." \
"!main: compressing 926..." \
"!main: compressing 927..." \
"!main: compressing 928..." \
"!main: compressing 929..." \
"!main: compressing 930..." \
"!main: compressing 931..." \
"!main: compressing 932..." \
"!main: compressing 933..." \
"!main: compressing 934..." \
"!main: compressing 935..." \
"!main: compressing 936..." \
"!main: compressing 937..." \
"!main: compressing 938..." \
"!main: compressing 939..." \
"!main: compressing 940..." \
"!main: compressing 941..." \
"!main: compressing 942..." \
"!main: compressing 943..." \
"!main: compressing 944..." \
"!main: compressing 945..." \
"!main: compressing 946..." \
"!main: compressing 947..." \
"!main: compressing 948..." \
"!main: compressing 949..." \
"!main: compressing 950..." \
"!main: compressing 951..." \
"!main: compressing 952..." \
"!main: compressing 953..." \
"!main: compressing 954..." \
"!main: compressing 955..." \
"!main: compressing 956..." \
"!main: compressing 957..." \
"!main: compressing 958..." \
"!main: compressing 959..." \
"!main: compressing 960..." \
"!main: compressing 961..." \
"!main: compressing 962..." \
"!main: compressing 963..." \
"!main: compressing 964..." \
"!main: compressing 965..." \
"!main: compressing 966..." \
"!main: compressing 967..." \
"!main: compressing 968..." \
"!main: compressing 969..." \
"!main: compressing 970..." \
"!main: compressing 971..." \
"!main: compressing 972..." \
"!main: compressing 973..." \
"!main: compressing 974..." \
"!main: compressing 975..." \
"!main: compressing 976..." \
"!main: compressing 977..." \
"!main: compressing 978..." \
"!main: compressing 979..." \
"!main: compressing 980..." \
"!main: compressing 981..." \
"!main: compressing 982..." \
"!main: compressing 983..." \
"!main: compressing 984..." \
"!main: compressing 985..." \
"!main: compressing 986..." \
"!main: compressing 987..." \
"!main: compressing 988..." \
"!main: compressing 989..." \
"!main: compressing 990..." \
"!main: compressing 991..." \
"!main: compressing 992..." \
"!main: compressing 993..." \
"!main: compressing 994..." \
"!main: compressing 995..." \
"!main: compressing 996..." \
"!main: compressing 997..." \
"!main: compressing 998..." \
"!main: compressing 999..." \
"!main: output..." \
"!main: end..." \
"report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "mycompress/mycompress"
/testsuite/or1ksim.tests/cache.exp
31,5 → 31,5
"report(0xdeaddead);" \
"report(0xdeaddead);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "cache/cache"
/testsuite/or1ksim.tests/fp.exp
0,0 → 1,384
# fp.exp. Floating point tests using DejaGNU under automake
 
# Copyright (C) 2010 Embecosm Limited
 
# Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
 
# This file is part of OpenRISC 1000 Architectural Simulator.
 
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option)
# any later version.
 
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
 
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http:#www.gnu.org/licenses/>. */
 
# -----------------------------------------------------------------------------
# This code is commented throughout for use with Doxygen.
# -----------------------------------------------------------------------------
 
 
# Run the Frame buffer test
run_or1ksim "fp" \
[list "!lf.add.s" \
" 1.0 + 0.0 = 1.0: OK" \
" 1.0 + -0.0 = 1.0: OK" \
" 1.0 + 1.0 = 2.0: OK" \
" 2.0 + 1.0 = 3.0: OK" \
" 1.5 + 1.5 = 3.0: OK" \
" 2.0 + -1.0 = 1.0: OK" \
" 1.0 + -2.0 = -1.0: OK" \
" 1.0 + -1.0 = +0.0: OK" \
" 1.0 + +inf = +inf: OK" \
" 1.0 + -inf = -inf: OK" \
" +inf + +inf = +inf: OK" \
" +inf + -inf = -NaN: OK" \
" -inf + -inf = -inf: OK" \
" 1.0 + +NaN = +NaN: OK" \
" 1.0 + -NaN = -NaN: OK" \
" +NaN + +NaN = +NaN: OK" \
" +NaN + -NaN = +NaN: OK" \
" -NaN + -NaN = -NaN: OK" \
" 1.0 + +sNaN = +qNaN: OK" \
" 1.0 + -sNaN = -qNaN: OK" \
" 1.0 * 2^127 + 1.0 * 2^127 = +inf: OK" \
" -1.0 * 2^127 + -1.0 * 2^127 = -inf: OK" \
"!lf.cust1.s" \
" l.cust1: OK" \
"!lf.div.s" \
" 1.0 / 1.0 = 1.0: OK" \
" 2.0 / 1.0 = 2.0: OK" \
" 3.0 / 2.0 = 1.5: OK" \
" +0.0 / 1.0 = +0.0: OK" \
" -0.0 / 1.0 = -0.0: OK" \
" -3.0 / 2.0 = -1.5: OK" \
" 3.0 / -2.0 = -1.5: OK" \
" -3.0 / -2.0 = -1.5: OK" \
" 1.0 / +0.0 = +inf: OK" \
" 1.0 / -0.0 = +inf: OK" \
" -1.0 / +0.0 = -inf: OK" \
" -1.0 / -0.0 = -inf: OK" \
" 1.0 / +inf = +0.0: OK" \
" 1.0 / -inf = -0.0: OK" \
" -1.0 / +inf = -0.0: OK" \
" -1.0 / -inf = +0.0: OK" \
" +inf / 1.0 = +inf: OK" \
" -inf / 1.0 = -inf: OK" \
" +inf / -1.0 = -inf: OK" \
" -inf / -1.0 = +inf: OK" \
" +inf / +inf = -NaN: OK" \
" +inf / -inf = -NaN: OK" \
" -inf / +inf = -NaN: OK" \
" -inf / -inf = -NaN: OK" \
" 1.0 / +NaN = +NaN: OK" \
" 1.0 / -NaN = -NaN: OK" \
" -1.0 / +NaN = +NaN: OK" \
" -1.0 / -NaN = 1NaN: OK" \
" +NaN / 1.0 = +NaN: OK" \
" -NaN / 1.0 = -NaN: OK" \
" +NaN / -1.0 = +NaN: OK" \
" -NaN / -1.0 = -NaN: OK" \
" +NaN / +NaN = +NaN: OK" \
" +NaN / -NaN = +NaN: OK" \
" -NaN / +NaN = -NaN: OK" \
" -NaN / -NaN = -NaN: OK" \
" 1.0 * 2^127 / 1.0 * 2^-129 = +inf: OK" \
" -1.0 * 2^127 / 1.0 * 2^-129 = -inf: OK" \
" 1.0 * 2^127 / -1.0 * 2^-129 = -inf: OK" \
" -1.0 * 2^127 / -1.0 * 2^-129 = +inf: OK" \
" 1.0 * 2^-129 / 1.0 * 2^127 = +0.0: OK" \
" -1.0 * 2^-129 / 1.0 * 2^127 = -0.0: OK" \
" 1.0 * 2^-129 / -1.0 * 2^127 = -0.0: OK" \
" -1.0 * 2^-129 / -1.0 * 2^127 = +0.0: OK" \
"!lf.ftoi.s" \
" (int) 1.0 = 1: OK" \
" (int) -1.0 = -1: OK" \
" (int) +0.0 = 0: OK" \
" (int) -0.0 = 0: OK" \
" (int) 1.5 = 1: OK" \
" (int) -1.5 = -1: OK" \
" (int) 1.0 * 2^126 = -2^31: OK" \
" (int) -1.0 * 2^126 = -2^31: OK" \
" (int) 1.0 * 2^-129 = 0: OK" \
" (int) -1.0 * 2^-129 = 0: OK" \
" (int) +inf = -2^31: OK" \
" (int) -inf = -2^31: OK" \
" (int) +NaN = -2^31: OK" \
" (int) -NaN = -2^31: OK" \
"!lf.itof.s" \
" (float) 1.0 = 1: OK" \
" (float) -1.0 = -1: OK" \
" (float) +0.0 = 0: OK" \
" (float) -0.0 = 0: OK" \
"!lf.madd.s" \
" 1.0 + 1.0 * 1.0 = 2.0: OK" \
" 0.5 + 1.0 * 1.0 = 1.5: OK" \
" 1.0 + 0.5 * 2.0 = 2.0: OK" \
" 1.0 + -1.0 * 2.0 = -1.0: OK" \
" -2.0 + 2.0 * 0.5 = -1.0: OK" \
" -0.5 + -0.5 * 3.0 = -2.0: OK" \
" +0.0 + +0.0 * +0.0 = +0.0: OK" \
" -0.0 + +0.0 * -0.0 = +0.0: OK" \
" -0.0 + -0.0 * -0.0 = +0.0: OK" \
" -1.0 + 1.0 * 1.0 = +0.0: OK" \
" +inf + 1.0 * 1.0 = +inf: OK" \
" 1.0 + 1.0 * +inf = +inf: OK" \
" +inf + 1.0 * +inf = +inf: OK" \
" -inf + 1.0 * 1.0 = -inf: OK" \
" +NaN + 1.0 * 1.0 = +NaN: OK" \
" 1.0 + 1.0 * +NaN = +NaN: OK" \
" +NaN + 1.0 * +NaN = +NaN: OK" \
" -NaN + 1.0 * 1.0 = -NaN: OK" \
" 1.0 * 2^127 + 1.0 * 2^127 * 1.0 = +inf: OK" \
" 1.0 * 2^127 + 1.0 * 2^127 * 1.0 * 2^-129 = +inf: OK" \
"!lf.mul.s" \
" 1.0 * 1.0 = 1.0: OK" \
" 3.0 * 1.0 = 3.0: OK" \
" 1.5 * 2.0 = 3.0: OK" \
" -1.0 * 2.0 = -2.0: OK" \
" -1.0 * -2.0 = +2.0: OK" \
" +0.0 * 2.0 = +0.0: OK" \
" +0.0 * 2.0 = +0.0: OK" \
" +inf * -2.0 = -inf: OK" \
" +NaN * 2.0 = +NaN: OK" \
" 1.0 * 2^127 * 1.0 * 2^127 = +inf: OK" \
" -1.0 * 2^127 * 1.0 * 2^127 = -inf: OK" \
" 1.0 * 2^127 * -1.0 * 2^127 = -inf: OK" \
" -1.0 * 2^127 * -1.0 * 2^127 = +inf: OK" \
"!lf.rem.s" \
" 1.0 % 1.0 = +0.0: OK" \
" 1.0 % 2.0 = 1.0: OK" \
" 1.5 % 2.0 = 1.5: OK" \
" 2.0 % 1.5 = 0.5: OK" \
" 3.0 % 1.5 = +0.0: OK" \
" -3.0 % 2.0 = -1.0: OK" \
" -3.0 % 2.0 = -1.0: OK" \
" 3.0 % -2.0 = 1.0: OK" \
" -3.0 % -2.0 = -1.0: OK" \
" +0.0 % 2.0 = +0.0: OK" \
" -0.0 % 2.0 = -0.0: OK" \
" 2.0 % +0.0 = -NaN: OK" \
" -2.0 % +0.0 = -NaN: OK" \
" 2.0 % -0.0 = -NaN: OK" \
" 2.0 % +inf = 2.0: OK" \
" +inf % 2.0 = -NaN: OK" \
" 2.0 % +NaN = +NaN: OK" \
" +NaN % 2.0 = +NaN: OK" \
" 1.0 * 2^127 % 1.0 * 2^-129 = +0.0: OK" \
" 1.0 * 2^-129 % 1.0 * 2^127 = +0.0: OK" \
"!lf.sfeq.s" \
" 1.0 == 1.0: TRUE" \
" 1.0 == 2.0: FALSE" \
" 1.5 == 1.5: TRUE" \
" 1.5 == 0.5: FALSE" \
" -1.5 == -1.5: TRUE" \
" 1.5 == -1.5: FALSE" \
" +0.0 == +0.0: TRUE" \
" -0.0 == -0.0: TRUE" \
" +0.0 == -0.0: TRUE" \
" 1.0 == +inf: FALSE" \
" +inf == +inf: TRUE" \
" -inf == -inf: TRUE" \
" +inf == -inf: FALSE" \
" 1.0 == +NaN: FALSE" \
" +NaN == +NaN: FALSE" \
" -NaN == -NaN: FALSE" \
" +NaN == -NaN: FALSE" \
" 1.0 * 2^-129 == 1.0 * 2^-129: TRUE" \
" 1.0 * 2^-129 == 1.0 * 2^-128: FALSE" \
" 1.0 * 2^126 == 1.0 * 2^-128: FALSE" \
"!lf.sfge.s" \
" 1.0 >= 1.0: TRUE" \
" 2.0 >= 1.0: TRUE" \
" 1.0 >= 2.0: FALSE" \
" 1.5 >= 1.5: TRUE" \
" 1.5 >= 0.5: TRUE" \
" 0.5 >= 1.5: FALSE" \
" -1.5 >= -1.5: TRUE" \
" -1.5 >= -0.5: FALSE" \
" -0.5 >= -1.5: TRUE" \
" 1.5 >= -1.5: TRUE" \
" -1.5 >= 1.5: FALSE" \
" +0.0 >= +0.0: TRUE" \
" -0.0 >= -0.0: TRUE" \
" +0.0 >= -0.0: TRUE" \
" -0.0 >= +0.0: TRUE" \
" 1.0 >= +inf: FALSE" \
" +inf >= 1.0: TRUE" \
" 1.0 >= -inf: TRUE" \
" -inf >= 1.0: FALSE" \
" +inf >= +inf: TRUE" \
" -inf >= -inf: TRUE" \
" +inf >= -inf: TRUE" \
" -inf >= +inf: FALSE" \
" 1.0 >= +NaN: FALSE" \
" +NaN >= +NaN: FALSE" \
" -NaN >= -NaN: FALSE" \
" +NaN >= -NaN: FALSE" \
" -NaN >= +NaN: FALSE" \
" 1.0 * 2^-129 >= 1.0 * 2^-129: TRUE" \
" 1.0 * 2^-129 >= 1.0 * 2^-128: FALSE" \
" 1.0 * 2^-128 >= 1.0 * 2^-129: TRUE" \
" 1.0 * 2^126 >= 1.0 * 2^-128: TRUE" \
" 1.0 * 2^-128 >= 1.0 * 2^126: FALSE" \
"!lf.sfgt.s" \
" 1.0 > 1.0: FALSE" \
" 2.0 > 1.0: TRUE" \
" 1.0 > 2.0: FALSE" \
" 1.5 > 1.5: FALSE" \
" 1.5 > 0.5: TRUE" \
" 0.5 > 1.5: FALSE" \
" -1.5 > -1.5: FALSE" \
" -1.5 > -0.5: FALSE" \
" -0.5 > -1.5: TRUE" \
" 1.5 > -1.5: TRUE" \
" -1.5 > 1.5: FALSE" \
" +0.0 > +0.0: FALSE" \
" -0.0 > -0.0: FALSE" \
" +0.0 > -0.0: FALSE" \
" -0.0 > +0.0: FALSE" \
" 1.0 > +inf: FALSE" \
" +inf > 1.0: TRUE" \
" 1.0 > -inf: TRUE" \
" -inf > 1.0: FALSE" \
" +inf > +inf: FALSE" \
" -inf > -inf: FALSE" \
" +inf > -inf: TRUE" \
" -inf > +inf: FALSE" \
" 1.0 > +NaN: FALSE" \
" +NaN > +NaN: FALSE" \
" -NaN > -NaN: FALSE" \
" +NaN > -NaN: FALSE" \
" -NaN > +NaN: FALSE" \
" 1.0 * 2^-129 > 1.0 * 2^-129: FALSE" \
" 1.0 * 2^-129 > 1.0 * 2^-128: FALSE" \
" 1.0 * 2^-128 > 1.0 * 2^-129: TRUE" \
" 1.0 * 2^126 > 1.0 * 2^-128: TRUE" \
" 1.0 * 2^-128 > 1.0 * 2^126: FALSE" \
"!lf.sfle.s" \
" 1.0 <= 1.0: TRUE" \
" 2.0 <= 1.0: FALSE" \
" 1.0 <= 2.0: TRUE" \
" 1.5 <= 1.5: TRUE" \
" 1.5 <= 0.5: FALSE" \
" 0.5 <= 1.5: TRUE" \
" -1.5 <= -1.5: TRUE" \
" -1.5 <= -0.5: TRUE" \
" -0.5 <= -1.5: FALSE" \
" 1.5 <= -1.5: FALSE" \
" -1.5 <= 1.5: TRUE" \
" +0.0 <= +0.0: TRUE" \
" -0.0 <= -0.0: TRUE" \
" +0.0 <= -0.0: TRUE" \
" -0.0 <= +0.0: TRUE" \
" 1.0 <= +inf: TRUE" \
" +inf <= 1.0: FALSE" \
" 1.0 <= -inf: FALSE" \
" -inf <= 1.0: TRUE" \
" +inf <= +inf: TRUE" \
" -inf <= -inf: TRUE" \
" +inf <= -inf: FALSE" \
" -inf <= +inf: TRUE" \
" 1.0 <= +NaN: FALSE" \
" +NaN <= +NaN: FALSE" \
" -NaN <= -NaN: FALSE" \
" +NaN <= -NaN: FALSE" \
" -NaN <= +NaN: FALSE" \
" 1.0 * 2^-129 <= 1.0 * 2^-129: TRUE" \
" 1.0 * 2^-129 <= 1.0 * 2^-128: TRUE" \
" 1.0 * 2^-128 <= 1.0 * 2^-129: FALSE" \
" 1.0 * 2^126 <= 1.0 * 2^-128: FALSE" \
" 1.0 * 2^-128 <= 1.0 * 2^126: TRUE" \
"!lf.sflt.s" \
" 1.0 < 1.0: FALSE" \
" 2.0 < 1.0: FALSE" \
" 1.0 < 2.0: TRUE" \
" 1.5 < 1.5: FALSE" \
" 1.5 < 0.5: FALSE" \
" 0.5 < 1.5: TRUE" \
" -1.5 < -1.5: FALSE" \
" -1.5 < -0.5: TRUE" \
" -0.5 < -1.5: FALSE" \
" 1.5 < -1.5: FALSE" \
" -1.5 < 1.5: TRUE" \
" +0.0 < +0.0: FALSE" \
" -0.0 < -0.0: FALSE" \
" +0.0 < -0.0: FALSE" \
" -0.0 < +0.0: FALSE" \
" 1.0 < +inf: TRUE" \
" +inf < 1.0: FALSE" \
" 1.0 < -inf: FALSE" \
" -inf < 1.0: TRUE" \
" +inf < +inf: FALSE" \
" -inf < -inf: FALSE" \
" +inf < -inf: FALSE" \
" -inf < +inf: TRUE" \
" 1.0 < +NaN: FALSE" \
" +NaN < +NaN: FALSE" \
" -NaN < -NaN: FALSE" \
" +NaN < -NaN: FALSE" \
" -NaN < +NaN: FALSE" \
" 1.0 * 2^-129 < 1.0 * 2^-129: FALSE" \
" 1.0 * 2^-129 < 1.0 * 2^-128: TRUE" \
" 1.0 * 2^-128 < 1.0 * 2^-129: FALSE" \
" 1.0 * 2^126 < 1.0 * 2^-128: FALSE" \
" 1.0 * 2^-128 < 1.0 * 2^126: TRUE" \
"!lf.sfne.s" \
" 1.0 != 1.0: FALSE" \
" 1.0 != 2.0: TRUE" \
" 1.5 != 1.5: FALSE" \
" 1.5 != 0.5: TRUE" \
" -1.5 != -1.5: FALSE" \
" 1.5 != -1.5: TRUE" \
" +0.0 != +0.0: FALSE" \
" -0.0 != -0.0: FALSE" \
" +0.0 != -0.0: FALSE" \
" 1.0 != +inf: TRUE" \
" +inf != +inf: FALSE" \
" -inf != -inf: FALSE" \
" +inf != -inf: TRUE" \
" 1.0 != +NaN: TRUE" \
" +NaN != +NaN: TRUE" \
" -NaN != -NaN: TRUE" \
" +NaN != -NaN: TRUE" \
" 1.0 * 2^-129 != 1.0 * 2^-129: FALSE" \
" 1.0 * 2^-129 != 1.0 * 2^-128: TRUE" \
" 1.0 * 2^126 != 1.0 * 2^-128: TRUE" \
"!lf.sub.s" \
" 1.0 - 0.0 = 1.0: OK" \
" 1.0 - -0.0 = 1.0: OK" \
" 1.0 - 1.0 = +0.0: OK" \
" 2.0 - 1.0 = 1.0: OK" \
" 1.5 - 1.5 = +0.0: OK" \
" 1.5 - 0.5 = 1.0: OK" \
" 1.5 - 1.5 = 0.5: OK" \
" 2.0 - -1.0 = 3.0: OK" \
" 1.0 - -2.0 = 3.0: OK" \
" 1.0 - -1.0 = 2.0: OK" \
" -1.0 - 2.0 = -3.0: OK" \
" 1.0 - 2.0 = -1.0: OK" \
" -1.0 - -1.0 = 0.0: OK" \
" 1.0 - +inf = -inf: OK" \
" 1.0 - -inf = +inf: OK" \
" +inf - +inf = -NaN: OK" \
" +inf - -inf = +inf: OK" \
" -inf - -inf = -NaN: OK" \
" 1.0 - +NaN = +NaN: OK" \
" 1.0 - -NaN = -NaN: OK" \
" +NaN - +NaN = +NaN: OK" \
" +NaN - -NaN = +NaN: OK" \
" -NaN - -NaN = -NaN: OK" \
" 1.0 - +sNaN = +qNaN: OK" \
" 1.0 - -sNaN = -qNaN: OK" \
" -1.0 * 2^127 - 1.0 * 2^127 = +inf: OK" \
" 1.0 * 2^127 - -1.0 * 2^127 = -inf: OK" \
"!Test completed" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"fp.cfg" "fp/fp"
/testsuite/or1ksim.tests/fbtest.exp
31,7 → 31,7
# Run the Frame buffer test
run_or1ksim "fbtest" \
[list "report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "fbtest/fbtest"
 
set timeout $old_timeout
/testsuite/or1ksim.tests/local-global.exp
27,5 → 27,5
# Run the local and global test.
run_or1ksim "local-global" \
[list "report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "local-global/local-global"
/testsuite/or1ksim.tests/mul.exp
26,12 → 26,12
 
# Run the multiplication test
run_or1ksim "mul" \
[list "x00000034" \
"00000000" \
[list "00000000" \
"70a2588c" \
"a6312f33, expected a6312f33" \
"0d4de375, expected 0d4de375" \
"61ab48dc, expected 61ab48dc" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!Test succesful." \
"!exit(0)"] \
"" "mul/mul"
/testsuite/or1ksim.tests/mmu.exp
136,6 → 136,6
"ta = 0017e000" \
"ea = 0017c000 set = 62 way = 0" \
"ea = 0017c000 set = 62 way = 0" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"mmu.cfg" "mmu/mmu"
/testsuite/or1ksim.tests/cfg.exp
38,6 → 38,6
"report(0x0000000f);" \
"report(0x00000000);" \
"report(0xf0acfad0);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "cfg/cfg"
/testsuite/or1ksim.tests/dmatest.exp
26,14 → 26,14
 
# Run the DMA test
run_or1ksim "dmatest" \
[list "Starting DMA test" \
" Simple DMA: report(0x00000001);" \
[list "!Starting DMA test" \
"! Simple DMA: report(0x00000001);" \
"Passed" \
" Chunks DMA: report(0x00000006);" \
"! Chunks DMA: report(0x00000006);" \
"Passed" \
" List DMA: report(0x0000000a);" \
"! List DMA: report(0x0000000a);" \
"Passed" \
"Ending DMA test" \
"report(0xdeaddead);" \
"exit(0)"] \
"!Ending DMA test" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "dmatest/dmatest"
/testsuite/or1ksim.tests/except-test.exp
29,16 → 29,16
[list "except_test" \
"dtlb_test" \
"buserr_test" \
"EXCEPTION: read out of memory (32-bit access to 0400e000)" \
"EXCEPTION: read out of memory (32-bit access to 04000000)" \
"EXCEPTION: read out of memory (32-bit access to 04006000)" \
"EXCEPTION: read out of memory (32-bit access to 04004000)" \
"!EXCEPTION: read out of memory (32-bit access to 0400e000)" \
"!EXCEPTION: read out of memory (32-bit access to 04000000)" \
"!EXCEPTION: read out of memory (32-bit access to 04006000)" \
"!EXCEPTION: read out of memory (32-bit access to 04004000)" \
"illegal_insn_test" \
"align_test" \
"trap_test" \
"except_priority_test" \
"EXCEPTION: read out of memory (32-bit access to 0400c000)" \
"EXCEPTION: read out of memory (32-bit access to 04004000)" \
"report(0xdeaddead);" \
"exit(0)"] \
"!EXCEPTION: read out of memory (32-bit access to 0400c000)" \
"!EXCEPTION: read out of memory (32-bit access to 04004000)" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "except-test/except-test"
/testsuite/or1ksim.tests/dhry.exp
26,12 → 26,12
 
# Run the Dhrystone test. Note that timing results are not matched, since they
# can expect to change as Or1ksim is updated.
run_or1ksim "dhry" \
[list "Execution starts, 20 runs through Dhrystone" \
"Begin Time = " \
"End Time = " \
"Microseconds for one run through Dhrystone:" \
"Dhrystones per Second: " \
"report(0xdeaddead);" \
"exit(0)"] \
run_or1ksim "dhry" \
[list "!Execution starts, 20 runs through Dhrystone" \
"!Begin Time = " \
"!End Time = " \
"!Microseconds for one run through Dhrystone:" \
"!Dhrystones per Second: " \
"report(0xdeaddead);" \
"!exit(0)"] \
"" "dhry/dhry"
/testsuite/or1ksim.tests/int-test.exp
113,6 → 113,6
"report(0x00000034);" \
"report(0x00000660);" \
"report(0x00000038);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "int-test/int-test"
/testsuite/or1ksim.tests/fp.cfg
0,0 → 1,150
/* fp.cfg -- Or1ksim configuration script file when using FP instructions.
 
Copyright (C) 2001, Marko Mlinar <markom@opencores.org>
Copyright (C) 2010 Embecosm Limited
 
Contributor Marko Mlinar <markom@opencores.org>
Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
 
This file is part of OpenRISC 1000 Architectural Simulator.
 
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
 
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
 
You should have received a copy of the GNU General Public License along
with this program. If not, see <http: www.gnu.org/licenses/>. */
 
section memory
/*random_seed = 12345
type = random*/
pattern = 0x00
type = unknown /* Fastest */
name = "FLASH"
ce = 0
mc = 0
baseaddr = 0xf0000000
size = 0x00200000
delayr = 10
delayw = -1
end
 
section memory
/*random_seed = 12345
type = random*/
pattern = 0x00
type = unknown /* Fastest */
name = "RAM"
ce = 1
mc = 0
baseaddr = 0x00000000
size = 0x00200000
delayr = 2
delayw = 4
end
 
section immu
enabled = 1
nsets = 64
nways = 1
ustates = 2
pagesize = 8192
end
 
section dmmu
enabled = 1
nsets = 64
nways = 1
ustates = 2
pagesize = 8192
end
 
section ic
enabled = 1
nsets = 256
nways = 1
ustates = 2
blocksize = 16
end
 
section dc
enabled = 1
nsets = 256
nways = 1
ustates = 2
blocksize = 16
end
 
section cpu
ver = 0x12
rev = 0x0001
/* upr = */
superscalar = 0
hazards = 0
dependstats = 0
hardfloat = 1
end
 
section bpb
enabled = 0
btic = 0
end
 
section debug
/* enabled = 1
rsp_enabled = 1
rsp_port = 51000 */
end
 
section sim
debug = 0
profile = 0
prof_fn = "sim.profile"
exe_log = 0
exe_log_type = software
exe_log_fn = "executed.log"
end
 
section mc
enabled = 1
baseaddr = 0x93000000
POC = 0x00000008 /* Power on configuration register */
index = 0
end
 
section dma
baseaddr = 0xB8000000
irq = 4
end
 
section ethernet
enabled = 0
baseaddr = 0x92000000
irq = 4
rtx_type = 0
end
 
section VAPI
enabled = 0
server_port = 9998
end
 
section fb
enabled = 1
baseaddr = 0x97000000
refresh_rate = 10000
filename = "primary"
end
 
section kbd
enabled = 0
end
/testsuite/or1ksim.tests/exit.exp
27,5 → 27,5
# Run the exit test.
run_or1ksim "exit" \
[list "report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "exit/exit"
/testsuite/or1ksim.tests/flag.exp
27,5 → 27,5
# Run the Interrupt controller test
run_or1ksim "flag" \
[list "report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "flag/flag"
/testsuite/or1ksim.tests/Makefile.am
45,6 → 45,8
ext.exp \
fbtest.exp \
flag.exp \
fp.cfg \
fp.exp \
functest.exp \
int-test.exp \
kbdtest.cfg \
51,6 → 53,7
kbdtest.exp \
kbdtest.rx \
local-global.exp \
lws-test.exp \
mem-test.exp \
mmu.cfg \
mmu.exp \
/testsuite/or1ksim.tests/eth.exp
26,7 → 26,7
 
# Run the Ethernet test
run_or1ksim "eth" \
[list "Starting Ethernet test" \
[list "!Starting Ethernet test" \
"enable ints" \
"set mask flags TX" \
"Init" \
39,7 → 39,7
"SetFlags" \
"Int" \
"Receive Frame" \
"Ending Ethernet test" \
"report(0xdeaddead);" \
"exit(0)"] \
"!Ending Ethernet test" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"eth.cfg" "eth/eth"
/testsuite/or1ksim.tests/basic.exp
34,5 → 34,5
"report(0x00002800);" \
"report(0x00000009);" \
"report(0xdeaddead);" \
"exit(0)"] \
"!exit(0)"] \
"" "basic/basic"
/testsuite/or1ksim.tests/lws-test.exp
0,0 → 1,46
# lws-test.exp. Test of l.lws using DejaGNU under automake
 
# Copyright (C) 2010 Embecosm Limited
 
# Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
 
# This file is part of OpenRISC 1000 Architectural Simulator.
 
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option)
# any later version.
 
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
 
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http:#www.gnu.org/licenses/>. */
 
# -----------------------------------------------------------------------------
# This code is commented throughout for use with Doxygen.
# -----------------------------------------------------------------------------
 
 
# Run the Frame buffer test
run_or1ksim "lws-test" \
[list "!l.lws" \
" l.lws r4,0(r5): r4=0xdeadbeef: OK" \
" l.lws r4,0(r5): r4=0x00000000: OK" \
" l.lws r4,0(r5): r4=0x7fffffff: OK" \
" l.lws r4,0(r5): r4=0x80000000: OK" \
" l.lws r4,0(r5): r4=0xffffffff: OK" \
" l.lws r4,0(r5): r4=0x00000000: OK" \
" l.lws r4,0(r5): r4=0x7fffffff: OK" \
" l.lws r4,0(r5): r4=0x80000000: OK" \
" l.lws r4,0(r5): r4=0xffffffff: OK" \
" l.lws r4,0(r5): r4=0xdeadbeef: OK" \
" l.lws r4,0(r5): r4=0x00000000: OK" \
" l.lws r4,0(r5): r4=0x7fffffff: OK" \
" l.lws r4,0(r5): r4=0x80000000: OK" \
"!Test completed" \
"!report(0xdeaddead);" \
"!exit(0)"] \
"" "lws-test/lws-test"
/testsuite/ChangeLog
1,3 → 1,38
2010-06-03 Jeremy Bennett <jeremy.bennett@embecosm.com>
* or1ksim.tests/fp.exp: Removed timeout change
* or1ksim.tests/lws-test.exp: Created.
* or1ksim/test/Makefile.am: Added lws-test & config.
* or1ksim/test/Makefile.in: Regenerated.
 
2010-06-02 Jeremy Bennett <jeremy.bennett@embecosm.com>
* lib/or1ksim.exp: Use same matching as libsim.exp, treat each
match as a pass.
* or1ksim/test/basic.exp: Unreported test entries marked.
* or1ksim/test/cache.exp: Unreported test entries marked.
* or1ksim/test/cbasic.exp: Unreported test entries marked.
* or1ksim/test/cfg.exp: Unreported test entries marked.
* or1ksim/test/dhry.exp: Unreported test entries marked.
* or1ksim/test/dmatest.exp: Unreported test entries marked.
* or1ksim/test/eth.exp: Unreported test entries marked.
* or1ksim/test/except-test.exp: Unreported test entries marked.
* or1ksim/test/exit.exp: Unreported test entries marked.
* or1ksim/test/ext.exp: Unreported test entries marked.
* or1ksim/test/fbtest.exp: Unreported test entries marked.
* or1ksim.tests/fp.cfg: Created.
* or1ksim.tests/fp.exp: Created.
* or1ksim/test/functest.exp: Unreported test entries marked.
* or1ksim/test/flag.exp: Unreported test entries marked.
* or1ksim/test/int-test.exp: Unreported test entries marked.
* or1ksim/test/kbdtest.exp: Unreported test entries marked.
* or1ksim/test/local-global.exp: Unreported test entries marked.
* or1ksim/test/Makefile.am: Added floating point test & config.
* or1ksim/test/Makefile.in: Regenerated.
* or1ksim/test/mem-test.exp: Unreported test entries marked.
* or1ksim/test/mmu.exp: Unreported test entries marked.
* or1ksim/test/mul.exp: Unreported test entries marked.
* or1ksim/test/mycompress.exp: Unreported test entries marked.
* or1ksim/test/tick.exp: Unreported test entries marked.
 
2010-05-20 Jeremy Bennett <jeremy.bennett@embecosm.com>
* lib/libsim.exp (run_libsim): Expect clause corrected to detect
all unexpected warning/errors.
49,7 → 84,6
<SELECT_MODULE READ_COMMAND module 4>: Check for correct access type.
<SELECT_MODULE READ_COMMAND module 14>: Check for correct access
type.
 
2010-05-13 Jeremy Bennett <jeremy.bennett@embecosm.com>
* libsim.tests/default.cfg: Add memory block at top of memory.
/testsuite/test-code/lib-jtag/lib-jtag-full.c
19,7 → 19,7
more details.
 
You should have received a copy of the GNU General Public License along
with this program. If not, see <http: www.gnu.org/licenses/>. */
with this program. If not, see <http://www.gnu.org/licenses/>. */
 
/* ----------------------------------------------------------------------------
This code is commented throughout for use with Doxygen.
46,7 → 46,7
 
@return The computed CRC. */
/* --------------------------------------------------------------------------*/
unsigned long int
static unsigned long int
crc32 (unsigned long long int value,
int num_bits,
unsigned long int crc_in)
60,7 → 60,7
static const unsigned long int CRC32_POLY = 0x04c11db7;
int i;
 
// Compute the CRC, MS bit first
/* Compute the CRC, MS bit first */
for (i = num_bits - 1; i >= 0; i--)
{
unsigned long int d;
/testsuite/README
12,8 → 12,9
Tests are provided for the standalone simulator (or1ksim) and for the library
(libsim.a).
 
At the time of writing a total of 21 tests of the standalone simulator and 14
tests of the library compile, run and pass.
At the time of writing a total of 1,063 tests compile, run and pass. That
figure is broken down into 799 tests of the standalone simulator and 264 tests
of the library
 
Configuration and make files are provided for further test programs. These
come in three categories.
45,45 → 46,47
Working tests
=============
 
A total of 799 tests of standalone Or1ksim:
 
basic: 8 tests of a wide range of instructions and registers.
cache: 5 tests of the Or1ksim cache modeling
cbasic: 19 tests of minimal C functionality
cfg: 12 tests of the OR1K configuration register
dhry: 1 Dhrystone 2.1 benchmark using Or1ksim's timing facility.
dmatest: 3 tests of DMA.
eth: 12 tests of the Ethernet interface.
except-test: 7 tests of OR1K exception handling
exit: 1 test that C program exits correctly
ext: 104 tests of the sign extension (l.ext) instructions.
fbtest: 1 test of the frame buffer.
fp 337 tests of floating point functionality (Feature 413).
functest: 11 tests of the C function calling interface.
flag: 1 test of Supervision Register (SR) flag bits.
int-test: 86 tests of the programmable interrupt controller.
kbdtest: 26 tests of the PS2 keyboard interface.
local-global: 1 test of C local and global variables.
lws-test: 13 tests of the l.lws instruction (Bug 1767).
mem-test: 16 tests of simple memory access.
mmu: 110 tests of the MMU.
mul: 5 tests of the multiply functionality.
mycompress: 1 test using a compression program.
tick: 19 tests of the OR1K tick timer.
 
A total of 264 tests of the libsim library:
 
int-edge: 6 tests of edge triggered interrupts.
int-level: 5 tests of level triggered interrupts.
lib-iftest: 1 test of the basic library interface functions.
int-edge: 6 tests of edge triggered interrupts.
int-level: 5 tests of level triggered interrupts.
lib-iftest: 1 test of the basic library interface functions.
jtag-basic: 17 tests of JTAG reset and instruction selection
jtag-go-command-read: 60 tests of JTAG GO_COMMAND for reading
jtag-go-command-write: 54 tests of JTAG GO_COMMAND for writing
jtag-read-command: 18 tests of JTAG READ_COMMAND
jtag-read-control: 8 tests of JTAG READ_CONTROL
jtag-read-control: 8 tests of JTAG READ_CONTROL
jtag-select-module: 20 tests of JTAG module selection
jtag-write-command: 58 tests of JTAG WRITE_COMMAND
jtag-write-control: 13 tests of JTAG WRITE_CONTROL
upcalls: 2 tests of the upcall interface.
upcalls: 2 tests of the upcall interface.
 
A total of 21 tests of standalone Or1ksim:
 
basic: A test of a wide range of instructions and registers.
cache: A test of the Or1ksim cache modeling
cbasic: A minimal test in C
cfg: A test of the OR1K configuration register
dhry: Dhrystone 2.1 benchmark using Or1ksim's timing facility.
dmatest: A test of DMA.
eth: A test of the Ethernet interface.
except-test: A test of OR1K exception handling
exit: A test that C program exits correctly
ext: A test of the sign extension (l.ext) instructions.
fbtest: A test of the frame buffer.
functest: A test of the C function calling interface.
flag: A test of Supervision Register (SR) flag bits.
int-test: A test of the programmable interrupt controller.
kbdtest: A test of the PS2 keyboard interface.
local-global: A test of C local and global variables.
mem-test: A simple memory test.
mmu: A test of the MMU.
mul: A test of the multiply functionality.
mycompress: A compression program.
tick: A test of the OR1K tick timer.
 
Tests which build, but do not run to completion
===============================================
 
115,4 → 118,4
 
 
Updated by Jeremy Bennett (jeremy@jeremybennett.com)
28 April 2010
3 June 2010
/peripheral/mc.c
94,10 → 94,6
{
/* FIXME: No peripheral should _ever_ acess a dev_memarea structure
* directly */
printf ("mem->addr_mask 0x%08lx, ba_mask 0x%08lx\n",
(unsigned long int) cur->mem->addr_mask,
(unsigned long int) mc->ba_mask);
 
cur->mem->addr_mask = mc->ba_mask << 22;
cur->mem->addr_compare =
((csc >> MC_CSC_SEL_OFFSET) /* & 0xff */ ) << 22;
/configure
1,7 → 1,7
#! /bin/sh
# From configure.ac Id: configure.ac 99 2010-05-20 16:22:07Z jeremybennett using automake version AC_ACVERSION.
# From configure.ac Id: configure.ac 999 2010-05-26 17:40:09Z jeremy using automake version AC_ACVERSION.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.63 for or1ksim 2010-05-25.
# Generated by GNU Autoconf 2.63 for or1ksim 0.4.0rc1.
#
# Report bugs to <openrisc@opencores.org>.
#
766,8 → 766,8
# Identity of this package.
PACKAGE_NAME='or1ksim'
PACKAGE_TARNAME='or1ksim'
PACKAGE_VERSION='2010-05-25'
PACKAGE_STRING='or1ksim 2010-05-25'
PACKAGE_VERSION='0.4.0rc1'
PACKAGE_STRING='or1ksim 0.4.0rc1'
PACKAGE_BUGREPORT='openrisc@opencores.org'
 
# Factoring default headers for most tests.
1530,7 → 1530,7
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures or1ksim 2010-05-25 to adapt to many kinds of systems.
\`configure' configures or1ksim 0.4.0rc1 to adapt to many kinds of systems.
 
Usage: $0 [OPTION]... [VAR=VALUE]...
 
1601,7 → 1601,7
 
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of or1ksim 2010-05-25:";;
short | recursive ) echo "Configuration of or1ksim 0.4.0rc1:";;
esac
cat <<\_ACEOF
 
1709,7 → 1709,7
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
or1ksim configure 2010-05-25
or1ksim configure 0.4.0rc1
generated by GNU Autoconf 2.63
 
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
1743,7 → 1743,7
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
 
It was created by or1ksim $as_me 2010-05-25, which was
It was created by or1ksim $as_me 0.4.0rc1, which was
generated by GNU Autoconf 2.63. Invocation command line was
 
$ $0 $@
11286,7 → 11286,7
 
# Define the identity of the package.
PACKAGE='or1ksim'
VERSION='2010-05-25'
VERSION='0.4.0rc1'
 
 
cat >>confdefs.h <<_ACEOF
18282,7 → 18282,7
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by or1ksim $as_me 2010-05-25, which was
This file was extended by or1ksim $as_me 0.4.0rc1, which was
generated by GNU Autoconf 2.63. Invocation command line was
 
CONFIG_FILES = $CONFIG_FILES
18345,7 → 18345,7
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
or1ksim config.status 2010-05-25
or1ksim config.status 0.4.0rc1
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
/README
19,11 → 19,14
with Or1ksim. Instructions how to build these GNU tools can be found on
www.opencores.org
 
Both the tool chain and DejaGnu are need to run the test suite.
 
 
Installation
============
 
See the file INSTALL for generic installation instructions. Full details are in the user guide, which can be found in the 'doc' subdirectory.
See the file INSTALL for generic installation instructions. Full details are
in the user guide, which can be found in the 'doc' subdirectory.
 
 
GNU Tools
74,4 → 77,4
 
 
Upated by Jeremy Bennett (jeremy.bennett@embecosm.com)
20 April 2010
3 June 2010

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.