~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gas/testsuite/gas/aarch64/fp_cvt_int.s

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* fp_cvt_ins.s Test file for AArch64 floating-point<->fixed-point
 
2
   conversion and floating-point<->integer conversion instructions.
 
3
 
 
4
   Copyright 2011, 2012 Free Software Foundation, Inc.
 
5
   Contributed by ARM Ltd.
 
6
 
 
7
   This file is part of GAS.
 
8
 
 
9
   GAS is free software; you can redistribute it and/or modify
 
10
   it under the terms of the GNU General Public License as published by
 
11
   the Free Software Foundation; either version 3 of the license, or
 
12
   (at your option) any later version.
 
13
 
 
14
   GAS is distributed in the hope that it will be useful,
 
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
   GNU General Public License for more details.
 
18
 
 
19
   You should have received a copy of the GNU General Public License
 
20
   along with this program; see the file COPYING3. If not,
 
21
   see <http://www.gnu.org/licenses/>.  */
 
22
 
 
23
        // SCVTF & UCVTF
 
24
        .macro do_cvtf fbits, reg
 
25
        .ifc    \fbits, 0
 
26
        // Floating-point<->integer conversions
 
27
        SCVTF   \reg\()7, W7
 
28
        SCVTF   \reg\()7, X7
 
29
        UCVTF   \reg\()7, W7
 
30
        UCVTF   \reg\()7, X7
 
31
        .else
 
32
        // Floating-point<->fixed-point conversions
 
33
        .ifle   \fbits-32
 
34
        SCVTF   \reg\()7, W7, #\fbits
 
35
        .endif
 
36
        SCVTF   \reg\()7, X7, #\fbits
 
37
        .ifle   \fbits-32
 
38
        UCVTF   \reg\()7, W7, #\fbits
 
39
        .endif
 
40
        UCVTF   \reg\()7, X7, #\fbits
 
41
        .endif
 
42
        .endm
 
43
 
 
44
        // FMOV
 
45
        .macro  do_fmov type
 
46
        .ifc    \type, S
 
47
        // 32-bit
 
48
        FMOV    W7, S7
 
49
        FMOV    S7, W7
 
50
        .elseif \type == D
 
51
        // 64-bit
 
52
        FMOV    X7, D7
 
53
        FMOV    D7, X7
 
54
        .else
 
55
        // 64-bit with V reg element
 
56
        FMOV    X7, V7.D[1]
 
57
        FMOV    V7.D[1], X7
 
58
        .endif
 
59
        .endm
 
60
 
 
61
        .macro  do_fcvt suffix, fbits, reg
 
62
        .ifc    \fbits, 0
 
63
        // Floating-point<->integer conversions
 
64
        FCVT\suffix     W7, \reg\()7
 
65
        FCVT\suffix     X7, \reg\()7
 
66
        .else
 
67
        // Floating-point<->fixed-point conversions
 
68
        .ifle   \fbits-32
 
69
        FCVT\suffix     W7, \reg\()7, #\fbits
 
70
        .endif
 
71
        FCVT\suffix     X7, \reg\()7, #\fbits
 
72
        .endif
 
73
        .endm
 
74
 
 
75
        .macro  fcvts_with_fbits fbits
 
76
        .ifc \fbits, 0
 
77
        // fp <-> integer
 
78
                .irp reg, S, D
 
79
                // single-precision and double precision
 
80
                do_fcvt NS, \fbits, \reg
 
81
                do_fcvt NU, \fbits, \reg
 
82
                do_fcvt PS, \fbits, \reg
 
83
                do_fcvt PU, \fbits, \reg
 
84
                do_fcvt MS, \fbits, \reg
 
85
                do_fcvt MU, \fbits, \reg
 
86
                do_fcvt ZS, \fbits, \reg
 
87
                do_fcvt ZU, \fbits, \reg
 
88
                do_cvtf \fbits, \reg
 
89
                do_fcvt AS, \fbits, \reg
 
90
                do_fcvt AU, \fbits, \reg
 
91
                do_fmov S
 
92
                .endr
 
93
        .else
 
94
        // fp <-> fixed-point
 
95
        // After ISA 2.06, only FCVTZ[US] and [US]CVTF are available
 
96
                .irp reg, S, D
 
97
                // single-precision and double precision
 
98
                do_fcvt ZS, \fbits, \reg
 
99
                do_fcvt ZU, \fbits, \reg
 
100
                do_cvtf \fbits, \reg
 
101
                .endr
 
102
        .endif
 
103
        .endm
 
104
 
 
105
        .macro  fcvts_with_fbits_wrapper from=0, to=64
 
106
        fcvts_with_fbits \from
 
107
        .if     \to-\from
 
108
        fcvts_with_fbits_wrapper "(\from+1)", \to
 
109
        .endif
 
110
        .endm
 
111
 
 
112
func:
 
113
        // Generate fcvt instructions without fbits and
 
114
        // with fbits from 1 to 64, also generate [us]cvtf
 
115
        // and fmov.
 
116
        fcvts_with_fbits_wrapper from=0, to=64
 
117
        do_fmov V