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 |