1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
dnl S/390-64 mpn_invert_limb
dnl Contributed to the GNU project by Torbjorn Granlund.
dnl Copyright 2011 Free Software Foundation, Inc.
dnl This file is part of the GNU MP Library.
dnl The GNU MP Library is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU Lesser General Public License as published
dnl by the Free Software Foundation; either version 3 of the License, or (at
dnl your option) any later version.
dnl The GNU MP Library is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
dnl License for more details.
dnl You should have received a copy of the GNU Lesser General Public License
dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
include(`../config.m4')
C cycles/limb
C z900 142
C z990 86
C z9 ?
C z10 ?
C z196 ?
ASM_START()
TEXT
ALIGN(16)
PROLOGUE(mpn_invert_limb)
stg %r9, 72(%r15)
srlg %r9, %r2, 55
agr %r9, %r9
larl %r4, approx_tab-512
srlg %r3, %r2, 24
aghi %r3, 1
lghi %r5, 1
llgh %r4, 0(%r9, %r4)
sllg %r9, %r4, 11
msgr %r4, %r4
msgr %r4, %r3
srlg %r4, %r4, 40
aghi %r9, -1
sgr %r9, %r4
sllg %r0, %r9, 60
sllg %r1, %r9, 13
msgr %r9, %r9
msgr %r9, %r3
sgr %r0, %r9
ngr %r5, %r2
srlg %r4, %r2, 1
srlg %r3, %r0, 47
agr %r3, %r1
agr %r4, %r5
msgr %r4, %r3
srlg %r1, %r3, 1
lcgr %r5, %r5
ngr %r1, %r5
sgr %r1, %r4
mlgr %r0, %r3
srlg %r9, %r0, 1
sllg %r4, %r3, 31
agr %r4, %r9
lgr %r1, %r4
mlgr %r0, %r2
algr %r1, %r2
alcgr %r0, %r2
lgr %r2, %r4
sgr %r2, %r0
lg %r9, 72(%r15)
br %r14
EPILOGUE()
RODATA
ALIGN(2)
approx_tab:
.word 0x7fd,0x7f5,0x7ed,0x7e5,0x7dd,0x7d5,0x7ce,0x7c6
.word 0x7bf,0x7b7,0x7b0,0x7a8,0x7a1,0x79a,0x792,0x78b
.word 0x784,0x77d,0x776,0x76f,0x768,0x761,0x75b,0x754
.word 0x74d,0x747,0x740,0x739,0x733,0x72c,0x726,0x720
.word 0x719,0x713,0x70d,0x707,0x700,0x6fa,0x6f4,0x6ee
.word 0x6e8,0x6e2,0x6dc,0x6d6,0x6d1,0x6cb,0x6c5,0x6bf
.word 0x6ba,0x6b4,0x6ae,0x6a9,0x6a3,0x69e,0x698,0x693
.word 0x68d,0x688,0x683,0x67d,0x678,0x673,0x66e,0x669
.word 0x664,0x65e,0x659,0x654,0x64f,0x64a,0x645,0x640
.word 0x63c,0x637,0x632,0x62d,0x628,0x624,0x61f,0x61a
.word 0x616,0x611,0x60c,0x608,0x603,0x5ff,0x5fa,0x5f6
.word 0x5f1,0x5ed,0x5e9,0x5e4,0x5e0,0x5dc,0x5d7,0x5d3
.word 0x5cf,0x5cb,0x5c6,0x5c2,0x5be,0x5ba,0x5b6,0x5b2
.word 0x5ae,0x5aa,0x5a6,0x5a2,0x59e,0x59a,0x596,0x592
.word 0x58e,0x58a,0x586,0x583,0x57f,0x57b,0x577,0x574
.word 0x570,0x56c,0x568,0x565,0x561,0x55e,0x55a,0x556
.word 0x553,0x54f,0x54c,0x548,0x545,0x541,0x53e,0x53a
.word 0x537,0x534,0x530,0x52d,0x52a,0x526,0x523,0x520
.word 0x51c,0x519,0x516,0x513,0x50f,0x50c,0x509,0x506
.word 0x503,0x500,0x4fc,0x4f9,0x4f6,0x4f3,0x4f0,0x4ed
.word 0x4ea,0x4e7,0x4e4,0x4e1,0x4de,0x4db,0x4d8,0x4d5
.word 0x4d2,0x4cf,0x4cc,0x4ca,0x4c7,0x4c4,0x4c1,0x4be
.word 0x4bb,0x4b9,0x4b6,0x4b3,0x4b0,0x4ad,0x4ab,0x4a8
.word 0x4a5,0x4a3,0x4a0,0x49d,0x49b,0x498,0x495,0x493
.word 0x490,0x48d,0x48b,0x488,0x486,0x483,0x481,0x47e
.word 0x47c,0x479,0x477,0x474,0x472,0x46f,0x46d,0x46a
.word 0x468,0x465,0x463,0x461,0x45e,0x45c,0x459,0x457
.word 0x455,0x452,0x450,0x44e,0x44b,0x449,0x447,0x444
.word 0x442,0x440,0x43e,0x43b,0x439,0x437,0x435,0x432
.word 0x430,0x42e,0x42c,0x42a,0x428,0x425,0x423,0x421
.word 0x41f,0x41d,0x41b,0x419,0x417,0x414,0x412,0x410
.word 0x40e,0x40c,0x40a,0x408,0x406,0x404,0x402,0x400
ASM_END()
|