Compare commits
4 Commits
b556e0086a
...
6cfd276014
Author | SHA1 | Date |
---|---|---|
Denis Drakhnia | 6cfd276014 | |
Denis Drakhnia | 7d99191317 | |
Denis Drakhnia | f7be1449a5 | |
Denis Drakhnia | 851ae69ee7 |
|
@ -1,5 +1,7 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#if (defined(MAX_VER) && __iset__ <= MAX_VER) || \
|
||||
(defined(MIN_VER) && __iset__ >= MIN_VER)
|
||||
{
|
||||
setwd wsz=4, nfx=1
|
||||
addd,0 0, arr, %r0
|
||||
|
@ -11,6 +13,9 @@
|
|||
nop 7
|
||||
OP,0 area=0, ind=0, am=1, be=0, %r0
|
||||
addd,0 %r0, 0, %r0
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
||||
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
#include "common.S"
|
||||
|
||||
#if __LCC__ < 120
|
||||
.text
|
||||
.global _start
|
||||
.balign 8
|
||||
.byte 0
|
||||
_start:
|
||||
nop
|
||||
|
||||
#include "test_end.S"
|
||||
#else
|
||||
#include "test_start.S"
|
||||
skip_test
|
||||
#include "test_end.S"
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#if __LCC__ < 120
|
||||
ibranch 1f
|
||||
0:
|
||||
|
||||
|
@ -9,3 +10,7 @@
|
|||
.byte 0
|
||||
1:
|
||||
ibranch 0b
|
||||
#else
|
||||
skip_test
|
||||
#include "test_end.S"
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#if __LCC__ < 120
|
||||
disp %ctpr1, 1f
|
||||
ct %ctpr1
|
||||
0:
|
||||
|
||||
#include "test_end.S"
|
||||
|
||||
|
@ -10,3 +10,7 @@
|
|||
.byte 0
|
||||
1:
|
||||
ibranch 0b
|
||||
#else
|
||||
skip_test
|
||||
#include "test_end.S"
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#if __LCC__ < 120
|
||||
{
|
||||
setwd wsz=4, nfx=1
|
||||
disp %ctpr1, 1f
|
||||
|
@ -13,3 +14,7 @@
|
|||
1:
|
||||
return %ctpr3
|
||||
ct %ctpr3
|
||||
#else
|
||||
skip_test
|
||||
#include "test_end.S"
|
||||
#endif
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
#ifndef SRC_BASE_COMMON_H
|
||||
#define SRC_BASE_COMMON_H
|
||||
|
||||
#define NR_exit 1
|
||||
#define NR_write 4
|
||||
#define NR_rt_sigaction 174
|
||||
#define NR_rt_sigreturn 173
|
||||
#define NR_access_hw_stacks 254
|
||||
#if !defined(__iset__)
|
||||
# define __iset__ 1
|
||||
#endif
|
||||
|
||||
#define NR_exit 1
|
||||
#define NR_write 4
|
||||
#define NR_mmap 90
|
||||
#define NR_rt_sigaction 174
|
||||
#define NR_rt_sigreturn 173
|
||||
#define NR_access_hw_stacks 254
|
||||
|
||||
#define SCRATCH_REG0 %g23
|
||||
#define SCRATCH_REG1 %g22
|
||||
|
@ -85,6 +90,58 @@
|
|||
sys_exit 77
|
||||
.endm
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
|
||||
#define MAP_SHARED 0x000001
|
||||
#define MAP_PRIVATE 0x000002
|
||||
#define MAP_SHARED_VALIDATE 0x000003
|
||||
#define MAP_ANONYMOUS 0x000010 /* don't use a file */
|
||||
#define MAP_FIXED 0x000100 /* Interpret addr exactly */
|
||||
#define MAP_DENYWRITE 0x000800 /* ETXTBSY */
|
||||
#define MAP_GROWSDOWN 0x001000 /* stack-like segment */
|
||||
#define MAP_GROWSUP 0x002000 /* register stack-like segment */
|
||||
#define MAP_EXECUTABLE 0x004000 /* mark it as an executable */
|
||||
#define MAP_LOCKED 0x008000 /* pages are locked */
|
||||
#define MAP_NORESERVE 0x010000 /* don't check for reservations */
|
||||
#define MAP_POPULATE 0x020000 /* populate (prefault) pagetables */
|
||||
#define MAP_NONBLOCK 0x040000 /* do not block on IO */
|
||||
#define MAP_FIRST32 0x080000 /* in protected mode map in */
|
||||
/* first 2 ** 32 area */
|
||||
#define MAP_WRITECOMBINED 0x100000 /* Write combine */
|
||||
#define MAP_HUGETLB 0x200000 /* create a huge page mapping */
|
||||
#define MAP_FIXED_NOREPLACE 0x400000 /* MAP_FIXED which doesn't unmap */
|
||||
/* underlying mapping */
|
||||
#define MAP_STACK MAP_GROWSDOWN
|
||||
|
||||
#define PROT_READ 0x1 /* page can be read */
|
||||
#define PROT_WRITE 0x2 /* page can be written */
|
||||
#define PROT_EXEC 0x4 /* page can be executed */
|
||||
#define PROT_SEM 0x8 /* page may be used for atomic ops */
|
||||
#define PROT_NONE 0x0 /* page can not be accessed */
|
||||
|
||||
.macro sys_mmap ret, addr, len, prot, flags, fd=-1, offset=0
|
||||
{
|
||||
setwd wsz=8, nfx=1
|
||||
setbn rsz=3, rbs=4, rcur=0
|
||||
sdisp %ctpr1, 0x3
|
||||
}
|
||||
addd,0 0, NR_mmap, %b[0]
|
||||
{
|
||||
addd,0 0, \addr, %b[1]
|
||||
addd,1 0, \len, %b[2]
|
||||
}
|
||||
{
|
||||
addd,0 0, \prot, %b[3]
|
||||
addd,1 0, \flags, %b[4]
|
||||
}
|
||||
{
|
||||
addd,0 0, \fd, %b[5]
|
||||
addd,1 0, \offset, %b[6]
|
||||
}
|
||||
call %ctpr1, wbs=4
|
||||
addd,0 0, %b[0], \ret
|
||||
.endm
|
||||
|
||||
#define write(MSG) \
|
||||
.pushsection ".rodata"; \
|
||||
local(str):; \
|
||||
|
|
|
@ -8,11 +8,5 @@
|
|||
.type _start, #function
|
||||
.balign 8
|
||||
_start:
|
||||
#ifdef MAX_VER
|
||||
max_version MAX_VER
|
||||
#endif
|
||||
#ifdef MIN_VER
|
||||
min_version MIN_VER
|
||||
#endif
|
||||
|
||||
#endif // SRC_BASE_TEST_START_H
|
||||
|
|
|
@ -66,10 +66,7 @@
|
|||
test_i64(getfd, 0xfedcba9876543210, F(32,16, 1, 4), 0xffffffffffffba98)
|
||||
test_i64(getfd, 0xfedcba9876543210, F(48,16, 1, 6), 0xfffffffffffffedc)
|
||||
|
||||
isa_version %r0
|
||||
cmpbdb,0 %r0, 5, %pred0
|
||||
ibranch 0f ? %pred0
|
||||
|
||||
#if __iset__ >= 5
|
||||
// v5+ does not follow older rules for src2[15:13]
|
||||
test_i64(getfd, 0x0000000000808080, F( 0,32, 1, 0), 0x0000000000808080)
|
||||
test_i64(getfd, 0x0000000000808080, F( 0,32, 1, 1), 0x0000000000808080)
|
||||
|
@ -80,10 +77,7 @@
|
|||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 1), 0x0000000000008080)
|
||||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 2), 0x0000000000008080)
|
||||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 3), 0x0000000000008080)
|
||||
|
||||
ibranch 1f
|
||||
|
||||
0:
|
||||
#else
|
||||
test_i64(getfd, 0x0000000000808080, F( 0,32, 1, 0), 0xffffffff00808080)
|
||||
test_i64(getfd, 0x0000000000808080, F( 0,32, 1, 1), 0xffffffff00808080)
|
||||
test_i64(getfd, 0x0000000000808080, F( 0,32, 1, 2), 0xffffffff00808080)
|
||||
|
@ -93,6 +87,6 @@
|
|||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 1), 0xffffffff00008080)
|
||||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 2), 0xffffffff00008080)
|
||||
test_i64(getfd, 0x0000000000010101, F( 1,32, 1, 3), 0x0000000000008080)
|
||||
1:
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
||||
|
|
|
@ -208,6 +208,17 @@ asm_tests = {
|
|||
'fxsubxx-1': {},
|
||||
'fxmulxx-1': {},
|
||||
},
|
||||
'qp': {
|
||||
'stmqp-1': {},
|
||||
'stmqp-unaligned-1': { 'should_fail': true, 'c_args': ['-DMAX_VER=6'] },
|
||||
'stmqp-unaligned-2': { 'should_fail': true, 'c_args': ['-DMAX_VER=6'] },
|
||||
'stmqp-unaligned-3': { 'src': 'stmqp-page-1', 'c_args': ['-DMIN_VER=6'] },
|
||||
'stmqp-unaligned-4': { 'src': 'stmqp-page-2', 'c_args': ['-DMIN_VER=6'] },
|
||||
'stmqp-page-1': { 'should_fail': true, 'c_args': ['-DMAX_VER=6'] },
|
||||
'stmqp-page-2': { 'should_fail': true, 'c_args': ['-DMAX_VER=6'] },
|
||||
'stmqp-page-3': { 'src': 'stmqp-page-1', 'c_args': ['-DMIN_VER=6'] },
|
||||
'stmqp-page-4': { 'src': 'stmqp-page-2', 'c_args': ['-DMIN_VER=6'] },
|
||||
},
|
||||
}
|
||||
|
||||
foreach suite, tests : asm_tests
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#if __iset__ >= 5
|
||||
{
|
||||
setwd wsz=8, nfx=0
|
||||
}
|
||||
{
|
||||
addd,0 0, 0xffeeddccbbaa9988, %g16
|
||||
addd,1 0, [ mem ], %g17
|
||||
}
|
||||
qppackdl,0 %g16, 0x7766554433221100, %g16
|
||||
stmqp,2 %g16, %g17, 0xaa55
|
||||
ldqp,0 %g17, 0, %g18
|
||||
qpswitchd,0 %g18, %g19
|
||||
assert_eq_i64(%g18, 0x0066004400220000)
|
||||
assert_eq_i64(%g19, 0xff00dd00bb009900)
|
||||
|
||||
stmqp,2 %g16, %g17, 0x55aa
|
||||
ldqp,0 %g17, 0, %g18
|
||||
qpswitchd,0 %g18, %g19
|
||||
assert_eq_i64(%g18, 0x7766554433221100)
|
||||
assert_eq_i64(%g19, 0xffeeddccbbaa9988)
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
||||
|
||||
.data
|
||||
.balign 16
|
||||
mem:
|
||||
.fill 16, 1, 0
|
|
@ -0,0 +1,28 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#ifndef MIN_VER
|
||||
# define MIN_VER 5
|
||||
#endif
|
||||
|
||||
#ifndef MAX_VER
|
||||
# define MAX_VER 99
|
||||
#endif
|
||||
|
||||
#if __iset__ >= MIN_VER && __iset__ < MAX_VER
|
||||
setwd wsz=8, nfx=0
|
||||
|
||||
sys_mmap %r0, 0, PAGE_SIZE * 3, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS
|
||||
addd,0 %r0, PAGE_SIZE, %r0
|
||||
sys_mmap %r0, %r0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED
|
||||
|
||||
subd,0 0, 1, %r1
|
||||
stb,2 %r1, [ %r0 ]
|
||||
qppackdl,0 %r1, %r1, %r1
|
||||
|
||||
addd,0 %r0, PAGE_SIZE - 8, %g16
|
||||
stmqp,2 %r1, %g16, 0x00ff
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
|
@ -0,0 +1,28 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#ifndef MIN_VER
|
||||
#define MIN_VER 5
|
||||
#endif
|
||||
|
||||
#ifndef MAX_VER
|
||||
# define MAX_VER 99
|
||||
#endif
|
||||
|
||||
#if __iset__ >= MIN_VER && __iset__ < MAX_VER
|
||||
setwd wsz=8, nfx=0
|
||||
|
||||
sys_mmap %r0, 0, PAGE_SIZE * 3, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS
|
||||
addd,0 %r0, PAGE_SIZE, %r0
|
||||
sys_mmap %r0, %r0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED
|
||||
|
||||
subd,0 0, 1, %r1
|
||||
stb,2 %r1, [ %r0 ]
|
||||
qppackdl,0 %r1, %r1, %r1
|
||||
|
||||
subd,0 %r0, 8, %g16
|
||||
stmqp,2 %r1, %g16, 0xff00
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
|
@ -0,0 +1,28 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#ifndef MIN_VER
|
||||
#define MIN_VER 5
|
||||
#endif
|
||||
|
||||
#ifndef MAX_VER
|
||||
# define MAX_VER 99
|
||||
#endif
|
||||
|
||||
#if __iset__ >= MIN_VER && __iset__ < MAX_VER
|
||||
{
|
||||
setwd wsz=8, nfx=0
|
||||
}
|
||||
qppackdl,0 0, 0, %g16
|
||||
addd,1 0, [ mem ], %g17
|
||||
stmqp,2 %g16, %g17, 0xaa55
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
||||
|
||||
.data
|
||||
.balign 16
|
||||
.fill 8, 1, 0
|
||||
mem:
|
||||
.fill 16, 1, 0
|
|
@ -0,0 +1,28 @@
|
|||
#include "test_start.S"
|
||||
|
||||
#ifndef MIN_VER
|
||||
#define MIN_VER 5
|
||||
#endif
|
||||
|
||||
#ifndef MAX_VER
|
||||
# define MAX_VER 99
|
||||
#endif
|
||||
|
||||
#if __iset__ >= MIN_VER && __iset__ < MAX_VER
|
||||
{
|
||||
setwd wsz=8, nfx=0
|
||||
}
|
||||
qppackdl,0 0, 0, %g16
|
||||
addd,1 0, [ mem ], %g17
|
||||
stmqp,2 %g16, %g17, 0xaa55
|
||||
#else
|
||||
skip_test
|
||||
#endif
|
||||
|
||||
#include "test_end.S"
|
||||
|
||||
.data
|
||||
.balign 16
|
||||
.fill 1, 1, 0
|
||||
mem:
|
||||
.fill 16, 1, 0
|
Loading…
Reference in New Issue