CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
417 lines
22 KiB
ArmAsm
417 lines
22 KiB
ArmAsm
# Check that carry for addition and subtraction works.
|
|
# mach: pru
|
|
|
|
# Copyright (C) 2023-2024 Free Software Foundation, Inc.
|
|
# Contributed by Dimitar Dimitrov <dimitar@dinux.eu>
|
|
#
|
|
# This file is part of the GNU simulators.
|
|
#
|
|
# 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/>.
|
|
|
|
.include "testutils.inc"
|
|
|
|
# Helper macro to exercise three consecutive
|
|
# instructions using the carry bit.
|
|
.macro test_seq srcmode, dstmode, init0, init1, init2, init3, alu0, alu1, alu2, expected
|
|
# In case srcmode>dstmode, "garbage" in the r20 MSB
|
|
# bits could falsely be interpreted as carry.
|
|
# So start with initialized destination to make tests consistent.
|
|
ldi r20, 0
|
|
ldi32 r15, \init0
|
|
ldi32 r16, \init1
|
|
ldi32 r17, \init2
|
|
ldi32 r18, \init3
|
|
ldi32 r0, \expected
|
|
\alu0 r20\dstmode, r15\srcmode, r16\srcmode
|
|
\alu1 r20\dstmode, r20\srcmode, r17\srcmode
|
|
\alu2 r20\dstmode, r20\srcmode, r18\srcmode
|
|
qbeq 1f, r0, r20\dstmode
|
|
jmp EXIT_FAIL
|
|
1:
|
|
.endm
|
|
|
|
# Helper macro to verify one ALU instruction
|
|
# using the carry bit.
|
|
.macro test1 alu, dstmode, src0mode, src0init, src1mode, src1init, expected
|
|
ldi32 r15, \src0init
|
|
ldi32 r16, \src1init
|
|
ldi32 r0, \expected
|
|
\alu r20\dstmode, r15\src0mode, r16\src1mode
|
|
qbeq 1f, r0, r20\dstmode
|
|
jmp EXIT_FAIL
|
|
1:
|
|
.endm
|
|
|
|
start
|
|
|
|
# ***** ADD 32-bit dst, 32-bit src *****
|
|
# {add, clear carry}
|
|
test1 add, " ", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
# {add with carry=0, clear carry}
|
|
test1 adc, " ", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
# {add with carry=0, set carry}
|
|
test1 adc, " ", " ", 0x00000001, " ", 0xffffffff, 0x00000000
|
|
# {add with carry=1, set carry}
|
|
test1 adc, " ", " ", 0x00000010, " ", 0xfffffffe, 0x0000000f
|
|
# {add with carry=1, clear carry}
|
|
test1 adc, " ", " ", 0x00000010, " ", 0x0ffffffe, 0x1000000f
|
|
# {add with carry=0, set carry}
|
|
test1 adc, " ", " ", 0x00000001, " ", 0xffffffff, 0x00000000
|
|
# {add, set carry}
|
|
test1 add, " ", " ", 0x00000001, " ", 0xffffffff, 0x00000000
|
|
# {add with carry=1, set carry}
|
|
test1 adc, " ", " ", 0x00000010, " ", 0xfffffffe, 0x0000000f
|
|
|
|
# ***** ADD 32-bit dst, 16-bit src *****
|
|
test1 add, " ", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, " ", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, " ", ".w0", 0x00000003, ".w0", 0xffffffff, 0x00010002
|
|
test1 adc, " ", ".w0", 0x00000010, ".w0", 0x0000fffe, 0x0001000e
|
|
|
|
# ***** ADD 32-bit dst, 8-bit src *****
|
|
test1 add, " ", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 adc, " ", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 adc, " ", ".b0", 0x00000003, ".b0", 0xffffffff, 0x00000102
|
|
test1 adc, " ", ".b0", 0x00000010, ".b0", 0x0000f0fe, 0x0000010e
|
|
|
|
# ***** ADD 16-bit dst, 32-bit src *****
|
|
test1 add, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000001, " ", 0xfff0ffff, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000010, " ", 0x0000fffe, 0x0000000f
|
|
test1 adc, ".w0", " ", 0x00000010, " ", 0x00000ffe, 0x0000100f
|
|
test1 adc, ".w0", " ", 0x00000001, " ", 0x0000ffff, 0x00000000
|
|
test1 add, ".w0", " ", 0x00000001, " ", 0x0000ffff, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000010, " ", 0x0000fffe, 0x0000000f
|
|
# Test when intermediate sum sets the carry.
|
|
test1 add, ".w0", " ", 0x00010000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000001
|
|
test1 add, ".w0", " ", 0x00020000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
|
|
# ***** ADD 16-bit dst, 16-bit src *****
|
|
test1 add, ".w0", ".w0", 0x00000210, ".w0", 0x00000130, 0x00000340
|
|
test1 adc, ".w0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", ".w0", 0x00000001, ".w0", 0xffffffff, 0x00000000
|
|
test1 adc, ".w0", ".w0", 0x00000010, ".w0", 0xfffffffe, 0x0000000f
|
|
test1 adc, ".w0", ".w0", 0x00000010, ".w0", 0x00000ffe, 0x0000100f
|
|
test1 adc, ".w0", ".w0", 0x00000001, ".w0", 0xfff0ffff, 0x00000000
|
|
test1 add, ".w0", ".w0", 0x00000001, ".w0", 0xfff0ffff, 0x00000000
|
|
test1 adc, ".w0", ".w0", 0x00000010, ".w0", 0xfff1fffe, 0x0000000f
|
|
|
|
# ***** ADD 16-bit dst, 8-bit src *****
|
|
test1 add, ".w0", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 adc, ".w0", ".b0", 0x00000003, ".b0", 0xffffffff, 0x00000102
|
|
test1 adc, ".w0", ".b0", 0x00000010, ".b0", 0x0000f0fe, 0x0000010e
|
|
|
|
# ***** ADD 8-bit dst, 32-bit src *****
|
|
test1 add, ".b0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", " ", 0x00000001, " ", 0x000000ff, 0x00000000
|
|
test1 adc, ".b0", " ", 0x00000010, " ", 0x000000fe, 0x0000000f
|
|
test1 adc, ".b0", " ", 0x00000021, " ", 0x0000001e, 0x00000040
|
|
test1 adc, ".b0", " ", 0x00000001, " ", 0x000000ff, 0x00000000
|
|
test1 add, ".b0", " ", 0x00000001, " ", 0x000000ff, 0x00000000
|
|
test1 adc, ".b0", " ", 0x00000010, " ", 0x000000fe, 0x0000000f
|
|
# Test when intermediate sum sets the carry.
|
|
test1 add, ".b0", " ", 0x10000100, " ", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", " ", 0x00000000, " ", 0x00000000, 0x00000001
|
|
|
|
# ***** ADD 8-bit dst, 16-bit src *****
|
|
test1 add, ".b0", ".w0", 0x10000000, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", ".w0", 0x02000000, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", ".w0", 0x00030001, ".w0", 0x000000ff, 0x00000000
|
|
test1 adc, ".b0", ".w0", 0x00004010, ".w0", 0x000000fe, 0x0000000f
|
|
test1 adc, ".b0", ".w0", 0x00000021, ".w0", 0x0000001e, 0x00000040
|
|
test1 adc, ".b0", ".w0", 0x00000001, ".w0", 0x000000ff, 0x00000000
|
|
test1 add, ".b0", ".w0", 0x00000001, ".w0", 0x000000ff, 0x00000000
|
|
test1 adc, ".b0", ".w0", 0x00000010, ".w0", 0x000000fe, 0x0000000f
|
|
# Test when intermediate sum sets the carry.
|
|
test1 add, ".b0", ".w0", 0x10003100, ".w0", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000001
|
|
|
|
# ***** ADD 8-bit dst, 8-bit src *****
|
|
test1 add, ".b0", ".b0", 0x00000210, ".b0", 0x00000130, 0x00000040
|
|
test1 adc, ".b0", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 adc, ".b0", ".b0", 0x00000001, ".b0", 0xffffffff, 0x00000000
|
|
test1 adc, ".b0", ".b0", 0x00000010, ".b0", 0xfffffffe, 0x0000000f
|
|
test1 adc, ".b0", ".b0", 0x00000010, ".b0", 0x0000000e, 0x0000001f
|
|
test1 adc, ".b0", ".b0", 0x00000001, ".b0", 0xfff0ffff, 0x00000000
|
|
test1 add, ".b0", ".b0", 0x00000001, ".b0", 0xfff0ffff, 0x00000000
|
|
test1 adc, ".b0", ".b0", 0x00000010, ".b0", 0xfff1fffe, 0x0000000f
|
|
|
|
# ***** SUB 32-bit dst, 32-bit src *****
|
|
# {sub, clear borrow}
|
|
test1 sub, " ", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
# {sub with borrow=0, clear borrow}
|
|
test1 suc, " ", " ", 0x00000010, " ", 0x00000001, 0x0000000f
|
|
# {sub with borrow=0, set borrow}
|
|
test1 suc, " ", " ", 0x00000008, " ", 0x00000009, 0xffffffff
|
|
# {sub with borrow=1, set borrow}
|
|
test1 suc, " ", " ", 0x00000008, " ", 0x00000009, 0xfffffffe
|
|
# {sub with borrow=1, clear borrow}
|
|
test1 suc, " ", " ", 0x00000008, " ", 0x00000001, 0x00000006
|
|
# {sub with borrow=0, set borrow}
|
|
test1 suc, " ", " ", 0x80000000, " ", 0x90000000, 0xf0000000
|
|
# {sub, set borrow}
|
|
test1 sub, " ", " ", 0x00000000, " ", 0x00000001, 0xffffffff
|
|
# {sub with borrow=1, set borrow}
|
|
test1 suc, " ", " ", 0x80000000, " ", 0x90000000, 0xefffffff
|
|
|
|
# ***** SUB 32-bit dst, 16-bit src *****
|
|
test1 sub, " ", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 suc, " ", ".w0", 0x00000010, ".w0", 0x00000001, 0x0000000f
|
|
test1 suc, " ", ".w0", 0x00000008, ".w0", 0x00000009, 0xffffffff
|
|
test1 suc, " ", ".w0", 0x00000008, ".w0", 0x00000009, 0xfffffffe
|
|
test1 suc, " ", ".w0", 0x00000008, ".w0", 0x00000001, 0x00000006
|
|
test1 suc, " ", ".w0", 0x00108000, ".w0", 0x00009000, 0xfffff000
|
|
test1 sub, " ", ".w0", 0x00000000, ".w0", 0x00000001, 0xffffffff
|
|
test1 suc, " ", ".w0", 0x00008000, ".w0", 0x00009000, 0xffffefff
|
|
|
|
# ***** SUB 32-bit dst, 8-bit src *****
|
|
test1 sub, " ", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 suc, " ", ".b0", 0x00000010, ".b0", 0x00000001, 0x0000000f
|
|
test1 suc, " ", ".b0", 0x00000008, ".b0", 0x00000009, 0xffffffff
|
|
test1 suc, " ", ".b0", 0x00000008, ".b0", 0x00000009, 0xfffffffe
|
|
test1 suc, " ", ".b0", 0x00000008, ".b0", 0x00000001, 0x00000006
|
|
test1 suc, " ", ".b0", 0x00108080, ".b0", 0x00009090, 0xfffffff0
|
|
test1 sub, " ", ".b0", 0x00000000, ".b0", 0x00000001, 0xffffffff
|
|
test1 suc, " ", ".b0", 0x00008080, ".b0", 0x00009090, 0xffffffef
|
|
|
|
# ***** SUB 16-bit dst, 32-bit src *****
|
|
test1 sub, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 suc, ".w0", " ", 0x00000010, " ", 0x00000001, 0x0000000f
|
|
test1 suc, ".w0", " ", 0x00000008, " ", 0x00000009, 0x0000ffff
|
|
test1 suc, ".w0", " ", 0x00000008, " ", 0x00000009, 0x0000fffe
|
|
test1 suc, ".w0", " ", 0x00000008, " ", 0x00000001, 0x00000006
|
|
test1 suc, ".w0", " ", 0x00108000, " ", 0x00009000, 0x0000f000
|
|
test1 sub, ".w0", " ", 0x00000000, " ", 0x00000001, 0x0000ffff
|
|
test1 suc, ".w0", " ", 0x00008000, " ", 0x00009000, 0x0000efff
|
|
# Test when intermediate value sets the borrow.
|
|
test1 sub, ".w0", " ", 0x00010000, " ", 0x00000000, 0x00000000
|
|
test1 suc, ".w0", " ", 0x00000002, " ", 0x00000000, 0x00000001
|
|
|
|
# ***** SUB 16-bit dst, 16-bit src *****
|
|
test1 sub, ".w0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 suc, ".w0", ".w0", 0x00000010, ".w0", 0x00000001, 0x0000000f
|
|
test1 suc, ".w0", ".w0", 0x00000008, ".w0", 0x00000009, 0x0000ffff
|
|
test1 suc, ".w0", ".w0", 0x00000008, ".w0", 0x00000009, 0x0000fffe
|
|
test1 suc, ".w0", ".w0", 0x00000008, ".w0", 0x00000001, 0x00000006
|
|
test1 suc, ".w0", ".w0", 0x00108000, ".w0", 0x00009000, 0x0000f000
|
|
test1 sub, ".w0", ".w0", 0x00000000, ".w0", 0x00000001, 0x0000ffff
|
|
test1 suc, ".w0", ".w0", 0x00008000, ".w0", 0x00009000, 0x0000efff
|
|
|
|
# ***** SUB 16-bit dst, 8-bit src *****
|
|
test1 sub, ".w0", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 suc, ".w0", ".b0", 0x00000010, ".b0", 0x00000001, 0x0000000f
|
|
test1 suc, ".w0", ".b0", 0x00000008, ".b0", 0x00000009, 0x0000ffff
|
|
test1 suc, ".w0", ".b0", 0x00000008, ".b0", 0x00000009, 0x0000fffe
|
|
test1 suc, ".w0", ".b0", 0x00000008, ".b0", 0x00000001, 0x00000006
|
|
test1 suc, ".w0", ".b0", 0x00108080, ".b0", 0x00009090, 0x0000fff0
|
|
test1 sub, ".w0", ".b0", 0x00000000, ".b0", 0x00000001, 0x0000ffff
|
|
test1 suc, ".w0", ".b0", 0x0000a080, ".b0", 0x0000c090, 0x0000ffef
|
|
|
|
# ***** SUB 8-bit dst, 32-bit src *****
|
|
test1 sub, ".b0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 suc, ".b0", " ", 0x00000010, " ", 0x00000001, 0x0000000f
|
|
test1 suc, ".b0", " ", 0x00000008, " ", 0x00000009, 0x000000ff
|
|
test1 suc, ".b0", " ", 0x00000008, " ", 0x00000009, 0x000000fe
|
|
test1 suc, ".b0", " ", 0x00000008, " ", 0x00000001, 0x00000006
|
|
test1 suc, ".b0", " ", 0x00000080, " ", 0x00000090, 0x000000f0
|
|
test1 sub, ".b0", " ", 0x00000000, " ", 0x00000001, 0x000000ff
|
|
test1 suc, ".b0", " ", 0x00000080, " ", 0x00000090, 0x000000ef
|
|
# Test when intermediate value sets the borrow.
|
|
test1 sub, ".b0", " ", 0x00000100, " ", 0x00000000, 0x00000000
|
|
test1 suc, ".b0", " ", 0x00000002, " ", 0x00000000, 0x00000001
|
|
test1 sub, ".b0", " ", 0x00000100, " ", 0x00000000, 0x00000000
|
|
test1 rsc, ".b0", " ", 0x00000000, " ", 0x00000002, 0x00000001
|
|
|
|
# ***** SUB 8-bit dst, 16-bit src *****
|
|
test1 sub, ".b0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 suc, ".b0", ".w0", 0x00000010, ".w0", 0x00000001, 0x0000000f
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000009, 0x000000ff
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000009, 0x000000fe
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000001, 0x00000006
|
|
test1 suc, ".b0", ".w0", 0x00000080, ".w0", 0x00000090, 0x000000f0
|
|
test1 sub, ".b0", ".w0", 0x00000000, ".w0", 0x00000001, 0x000000ff
|
|
test1 suc, ".b0", ".w0", 0x00000080, ".w0", 0x00000090, 0x000000ef
|
|
# Test when intermediate value sets the borrow.
|
|
test1 sub, ".b0", ".w0", 0x00000100, ".w0", 0x00000000, 0x00000000
|
|
test1 suc, ".b0", ".w0", 0x00000002, ".w0", 0x00000000, 0x00000001
|
|
test1 sub, ".b0", ".w0", 0x00000100, ".w0", 0x00000000, 0x00000000
|
|
test1 rsc, ".b0", ".w0", 0x00000000, ".w0", 0x00000002, 0x00000001
|
|
|
|
# ***** SUB 8-bit dst, 8-bit src *****
|
|
test1 sub, ".b0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 suc, ".b0", ".w0", 0x00000010, ".w0", 0x00000001, 0x0000000f
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000009, 0x000000ff
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000009, 0x000000fe
|
|
test1 suc, ".b0", ".w0", 0x00000008, ".w0", 0x00000001, 0x00000006
|
|
test1 suc, ".b0", ".w0", 0x00000080, ".w0", 0x00000090, 0x000000f0
|
|
test1 sub, ".b0", ".w0", 0x00000000, ".w0", 0x00000001, 0x000000ff
|
|
test1 suc, ".b0", ".w0", 0x00000080, ".w0", 0x00000090, 0x000000ef
|
|
|
|
# ***** Reverse SUB 32-bit dst, 32-bit src *****
|
|
# {rsb, clear borrow}
|
|
test1 rsb, " ", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
# {rsb with borrow=0, clear borrow}
|
|
test1 rsc, " ", " ", 0x00000001, " ", 0x00000010, 0x0000000f
|
|
# {rsb with borrow=0, set borrow}
|
|
test1 rsc, " ", " ", 0x00000009, " ", 0x00000008, 0xffffffff
|
|
# {rsb with borrow=1, set borrow}
|
|
test1 rsc, " ", " ", 0x00000009, " ", 0x00000008, 0xfffffffe
|
|
# {rsb with borrow=1, clear borrow}
|
|
test1 rsc, " ", " ", 0x00000001, " ", 0x00000008, 0x00000006
|
|
# {rsb with borrow=0, set borrow}
|
|
test1 rsc, " ", " ", 0x90000000, " ", 0x80000000, 0xf0000000
|
|
# {rsb, set borrow}
|
|
test1 rsb, " ", " ", 0x00000001, " ", 0x00000000, 0xffffffff
|
|
# {rsb with borrow=1, set borrow}
|
|
test1 rsc, " ", " ", 0x90000000, " ", 0x80000000, 0xefffffff
|
|
|
|
# ***** Reverse SUB 32-bit dst, 16-bit src *****
|
|
test1 rsb, " ", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 rsc, " ", ".w0", 0x00000001, ".w0", 0x00000010, 0x0000000f
|
|
test1 rsc, " ", ".w0", 0x00000009, ".w0", 0x00000008, 0xffffffff
|
|
test1 rsc, " ", ".w0", 0x00000009, ".w0", 0x00000008, 0xfffffffe
|
|
test1 rsc, " ", ".w0", 0x00000001, ".w0", 0x00000008, 0x00000006
|
|
test1 rsc, " ", ".w0", 0x00109000, ".w0", 0x00008000, 0xfffff000
|
|
test1 rsb, " ", ".w0", 0x00000001, ".w0", 0x00000000, 0xffffffff
|
|
test1 rsc, " ", ".w0", 0x00009000, ".w0", 0x00008000, 0xffffefff
|
|
|
|
# ***** Reverse SUB 32-bit dst, 8-bit src *****
|
|
test1 rsb, " ", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 rsc, " ", ".b0", 0x00000001, ".b0", 0x00000010, 0x0000000f
|
|
test1 rsc, " ", ".b0", 0x00000009, ".b0", 0x00000008, 0xffffffff
|
|
test1 rsc, " ", ".b0", 0x00000009, ".b0", 0x00000008, 0xfffffffe
|
|
test1 rsc, " ", ".b0", 0x00000001, ".b0", 0x00000008, 0x00000006
|
|
test1 rsc, " ", ".b0", 0x00108090, ".b0", 0x00009080, 0xfffffff0
|
|
test1 rsb, " ", ".b0", 0x00000001, ".b0", 0x00000000, 0xffffffff
|
|
test1 rsc, " ", ".b0", 0x00008090, ".b0", 0x00009080, 0xffffffef
|
|
|
|
# ***** Reverse SUB 16-bit dst, 32-bit src *****
|
|
test1 rsb, ".w0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 rsc, ".w0", " ", 0x00000001, " ", 0x00000010, 0x0000000f
|
|
test1 rsc, ".w0", " ", 0x00000009, " ", 0x00000008, 0x0000ffff
|
|
test1 rsc, ".w0", " ", 0x00000009, " ", 0x00000008, 0x0000fffe
|
|
test1 rsc, ".w0", " ", 0x00000001, " ", 0x00000008, 0x00000006
|
|
test1 rsc, ".w0", " ", 0x00109000, " ", 0x00008000, 0x0000f000
|
|
test1 rsb, ".w0", " ", 0x00000001, " ", 0x00000000, 0x0000ffff
|
|
test1 rsc, ".w0", " ", 0x00009000, " ", 0x00008000, 0x0000efff
|
|
# Test when intermediate value sets the borrow.
|
|
test1 rsb, ".w0", " ", 0x00000000, " ", 0x00010000, 0x00000000
|
|
test1 rsc, ".w0", " ", 0x00000000, " ", 0x00000002, 0x00000001
|
|
|
|
# ***** Reverse SUB 16-bit dst, 16-bit src *****
|
|
test1 rsb, ".w0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 rsc, ".w0", ".w0", 0x00000001, ".w0", 0x00000010, 0x0000000f
|
|
test1 rsc, ".w0", ".w0", 0x00000009, ".w0", 0x00000008, 0x0000ffff
|
|
test1 rsc, ".w0", ".w0", 0x00000009, ".w0", 0x00000008, 0x0000fffe
|
|
test1 rsc, ".w0", ".w0", 0x00000001, ".w0", 0x00000008, 0x00000006
|
|
test1 rsc, ".w0", ".w0", 0x00109000, ".w0", 0x00008000, 0x0000f000
|
|
test1 rsb, ".w0", ".w0", 0x00000001, ".w0", 0x00000000, 0x0000ffff
|
|
test1 rsc, ".w0", ".w0", 0x00009000, ".w0", 0x00008000, 0x0000efff
|
|
|
|
# ***** Reverse SUB 16-bit dst, 8-bit src *****
|
|
test1 rsb, ".w0", ".b0", 0x00000000, ".b0", 0x00000000, 0x00000000
|
|
test1 rsc, ".w0", ".b0", 0x00000001, ".b0", 0x00000010, 0x0000000f
|
|
test1 rsc, ".w0", ".b0", 0x00000009, ".b0", 0x00000008, 0x0000ffff
|
|
test1 rsc, ".w0", ".b0", 0x00000009, ".b0", 0x00000008, 0x0000fffe
|
|
test1 rsc, ".w0", ".b0", 0x00000001, ".b0", 0x00000008, 0x00000006
|
|
test1 rsc, ".w0", ".b0", 0x00108090, ".b0", 0x00009080, 0x0000fff0
|
|
test1 rsb, ".w0", ".b0", 0x00000001, ".b0", 0x00000000, 0x0000ffff
|
|
test1 rsc, ".w0", ".b0", 0x0000a090, ".b0", 0x0000c080, 0x0000ffef
|
|
|
|
# ***** Reverse SUB 8-bit dst, 32-bit src *****
|
|
test1 rsb, ".b0", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 rsc, ".b0", " ", 0x00000001, " ", 0x00000010, 0x0000000f
|
|
test1 rsc, ".b0", " ", 0x00000009, " ", 0x00000008, 0x000000ff
|
|
test1 rsc, ".b0", " ", 0x00000009, " ", 0x00000008, 0x000000fe
|
|
test1 rsc, ".b0", " ", 0x00000001, " ", 0x00000008, 0x00000006
|
|
test1 rsc, ".b0", " ", 0x00000090, " ", 0x00000080, 0x000000f0
|
|
test1 rsb, ".b0", " ", 0x00000001, " ", 0x00000000, 0x000000ff
|
|
test1 rsc, ".b0", " ", 0x00000090, " ", 0x00000080, 0x000000ef
|
|
# Test when intermediate value sets the borrow.
|
|
test1 rsb, ".b0", " ", 0x00000000, " ", 0x00000100, 0x00000000
|
|
test1 rsc, ".b0", " ", 0x00000000, " ", 0x00000002, 0x00000001
|
|
test1 rsb, ".b0", " ", 0x00000000, " ", 0x00000100, 0x00000000
|
|
test1 suc, ".b0", " ", 0x00000002, " ", 0x00000000, 0x00000001
|
|
|
|
# ***** Reverse SUB 8-bit dst, 16-bit src *****
|
|
test1 rsb, ".b0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 rsc, ".b0", ".w0", 0x00000001, ".w0", 0x00000010, 0x0000000f
|
|
test1 rsc, ".b0", ".w0", 0x00000009, ".w0", 0x00000008, 0x000000ff
|
|
test1 rsc, ".b0", ".w0", 0x00000009, ".w0", 0x00000008, 0x000000fe
|
|
test1 rsc, ".b0", ".w0", 0x00000001, ".w0", 0x00000008, 0x00000006
|
|
test1 rsc, ".b0", ".w0", 0x00000090, ".w0", 0x00000080, 0x000000f0
|
|
test1 rsb, ".b0", ".w0", 0x00000001, ".w0", 0x00000000, 0x000000ff
|
|
test1 rsc, ".b0", ".w0", 0x00000090, ".w0", 0x00000080, 0x000000ef
|
|
# Test when intermediate value sets the borrow.
|
|
test1 rsb, ".b0", ".w0", 0x00000000, ".w0", 0x00000100, 0x00000000
|
|
test1 rsc, ".b0", ".w0", 0x00000000, ".w0", 0x00000002, 0x00000001
|
|
test1 rsb, ".b0", ".w0", 0x00000000, ".w0", 0x00000100, 0x00000000
|
|
test1 suc, ".b0", ".w0", 0x00000002, ".w0", 0x00000000, 0x00000001
|
|
|
|
# ***** Reverse SUB 8-bit dst, 8-bit src *****
|
|
test1 rsb, ".b0", ".w0", 0x00000000, ".w0", 0x00000000, 0x00000000
|
|
test1 rsc, ".b0", ".w0", 0x00000001, ".w0", 0x00000010, 0x0000000f
|
|
test1 rsc, ".b0", ".w0", 0x00000009, ".w0", 0x00000008, 0x000000ff
|
|
test1 rsc, ".b0", ".w0", 0x00000009, ".w0", 0x00000008, 0x000000fe
|
|
test1 rsc, ".b0", ".w0", 0x00000001, ".w0", 0x00000008, 0x00000006
|
|
test1 rsc, ".b0", ".w0", 0x00000090, ".w0", 0x00000080, 0x000000f0
|
|
test1 rsb, ".b0", ".w0", 0x00000001, ".w0", 0x00000000, 0x000000ff
|
|
test1 rsc, ".b0", ".w0", 0x00000090, ".w0", 0x00000080, 0x000000ef
|
|
|
|
# ***** Mixed 32-bit *****
|
|
test1 sub, " ", " ", 0x00000000, " ", 0x00000000, 0x00000000
|
|
test1 adc, " ", " ", 0x00000000, " ", 0x00000000, 0x00000001
|
|
test1 suc, " ", " ", 0x00000001, " ", 0x00000001, 0xffffffff
|
|
test1 adc, " ", " ", 0x00000001, " ", 0x00000000, 0x00000001
|
|
|
|
test_seq "", "", 0xffffffff, 0x00000001, 0x00000000, 0x00000000 add, suc, add, 0x00000000
|
|
test_seq "", "", 0xffffffff, 0x00000001, 0x00000000, 0x00000000 add, rsc, add, 0x00000000
|
|
test_seq "", "", 0xfffffffe, 0x00000001, 0x00000000, 0x00000000 add, suc, add, 0xfffffffe
|
|
test_seq "", "", 0xffffffff, 0x00000001, 0x00000000, 0x00000000 add, suc, adc, 0x00000001
|
|
test_seq "", "", 0xfffffffe, 0x00000001, 0x00000000, 0x00000000 add, suc, adc, 0xffffffff
|
|
|
|
test_seq "", "", 0xffffffff, 0x00000010, 0x00000000, 0x00000000 sub, adc, add, 0xfffffff0
|
|
test_seq "", "", 0x0fffffff, 0x00000010, 0x00000000, 0x00000000 sub, adc, add, 0x0ffffff0
|
|
test_seq "", "", 0x00000000, 0x00000010, 0x00000000, 0x00000000 sub, adc, add, 0xfffffff0
|
|
test_seq "", "", 0x00000000, 0x00000010, 0x00000000, 0x00000000 sub, adc, adc, 0xfffffff0
|
|
test_seq "", "", 0x00000000, 0x00000010, 0x00000000, 0x00000000 sub, adc, suc, 0xffffffef
|
|
|
|
|
|
# For coverage, also test sequences of ALU instructions
|
|
# (i.e. no other instructions in between).
|
|
test_seq "", "", 0x00000000, 0x00000000, 0x00000000, 0x00000000 add, adc, adc, 0x00000000
|
|
test_seq "", "", 0x80000000, 0xfffffff0, 0xc0000000, 0x0000001a add, adc, adc, 0x4000000c
|
|
test_seq "", ".b0", 0x00000000, 0x00000001, 0x000000ff, 0x00000000 add, adc, adc, 0x00000001
|
|
test_seq "", ".b0", 0x00000000, 0x00000001, 0x000000ff, 0x00000000 add, adc, adc, 0x00000001
|
|
test_seq ".b0", ".b0", 0x00000000, 0x00000001, 0x00000000, 0x0000ffff add, adc, adc, 0x00000000
|
|
test_seq ".b0", ".w0", 0x00000001, 0x00000020, 0x00000400, 0x00008000 add, adc, adc, 0x00000021
|
|
test_seq "", "", 0x00000010, 0x0000000f, 0x00000002, 0x00000020 sub, suc, suc, 0xffffffde
|
|
test_seq "", ".b0", 0x00000202, 0x00000000, 0x00000000, 0x00000000 sub, suc, suc, 0x00000002
|
|
test_seq ".w0", ".b0", 0x00000008, 0x00000000, 0x00000000, 0x00000000, sub, suc, suc, 0x00000008
|
|
test_seq ".w0", ".b0", 0x00000008, 0x000000ff, 0x000000ff, 0x000000ff, sub, suc, suc, 0x00000009
|
|
test_seq ".w0", ".b0", 0x00000008, 0x00000fff, 0x00000fff, 0x00000fff, sub, suc, suc, 0x0000000b
|
|
test_seq "", "", 0x0000000f, 0x00000010, 0x00000002, 0x00000020 rsb, suc, suc, 0xffffffde
|
|
test_seq "", "", 0xffffffff, 0x00000001, 0x00000000, 0x00000000 add, suc, adc, 0x00000001
|
|
test_seq "", "", 0x00000000, 0x00000010, 0x00000000, 0x00000000 sub, adc, adc, 0xfffffff0
|
|
test_seq "", "", 0x00000000, 0x00000010, 0x00000000, 0x00000000 sub, adc, suc, 0xffffffef
|
|
|
|
pass
|
|
EXIT_FAIL:
|
|
fail
|