~ubuntu-branches/debian/sid/gcc-4.8/sid

« back to all changes in this revision

Viewing changes to .svn/pristine/7c/7c8ee749253d8671930a477eed23520c813d12b9.svn-base

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-12-19 19:48:34 UTC
  • Revision ID: package-import@ubuntu.com-20141219194834-4dz1q7rrn5pad823
Tags: 4.8.4-1
* GCC 4.8.4 release.
  - Fix PR target/61407 (darwin), PR middle-end/58624 (ice),
    PR sanitizer/64265 (wrong code).
* Require recent binutils to pass go test failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# DP: Changes from the ibm/gcc-4_8-branch (documentation)
 
2
 
 
3
LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@206665 \
 
4
    svn://gcc.gnu.org/svn/gcc/branches/ibm/gcc-4_8-branch@208166 \
 
5
 | filterdiff --remove-timestamps --addoldprefix=a/src/ --addnewprefix=b/src/
 
6
 
 
7
--- a/src/gcc/doc/extend.texi
 
8
+++ b/src/gcc/doc/extend.texi
 
9
@@ -8804,6 +8804,7 @@
 
10
 * picoChip Built-in Functions::
 
11
 * PowerPC Built-in Functions::
 
12
 * PowerPC AltiVec/VSX Built-in Functions::
 
13
+* PowerPC Hardware Transactional Memory Built-in Functions::
 
14
 * RX Built-in Functions::
 
15
 * S/390 System z Built-in Functions::
 
16
 * SH Built-in Functions::
 
17
@@ -13931,6 +13932,531 @@
 
18
 @samp{vec_vsx_st} built-in functions always generate the VSX @samp{LXVD2X},
 
19
 @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions.
 
20
 
 
21
+If the ISA 2.07 additions to the vector/scalar (power8-vector)
 
22
+instruction set is available, the following additional functions are
 
23
+available for both 32-bit and 64-bit targets.  For 64-bit targets, you
 
24
+can use @var{vector long} instead of @var{vector long long},
 
25
+@var{vector bool long} instead of @var{vector bool long long}, and
 
26
+@var{vector unsigned long} instead of @var{vector unsigned long long}.
 
27
+
 
28
+@smallexample
 
29
+vector long long vec_abs (vector long long);
 
30
+
 
31
+vector long long vec_add (vector long long, vector long long);
 
32
+vector unsigned long long vec_add (vector unsigned long long,
 
33
+                                   vector unsigned long long);
 
34
+
 
35
+int vec_all_eq (vector long long, vector long long);
 
36
+int vec_all_ge (vector long long, vector long long);
 
37
+int vec_all_gt (vector long long, vector long long);
 
38
+int vec_all_le (vector long long, vector long long);
 
39
+int vec_all_lt (vector long long, vector long long);
 
40
+int vec_all_ne (vector long long, vector long long);
 
41
+int vec_any_eq (vector long long, vector long long);
 
42
+int vec_any_ge (vector long long, vector long long);
 
43
+int vec_any_gt (vector long long, vector long long);
 
44
+int vec_any_le (vector long long, vector long long);
 
45
+int vec_any_lt (vector long long, vector long long);
 
46
+int vec_any_ne (vector long long, vector long long);
 
47
+
 
48
+vector long long vec_eqv (vector long long, vector long long);
 
49
+vector long long vec_eqv (vector bool long long, vector long long);
 
50
+vector long long vec_eqv (vector long long, vector bool long long);
 
51
+vector unsigned long long vec_eqv (vector unsigned long long,
 
52
+                                   vector unsigned long long);
 
53
+vector unsigned long long vec_eqv (vector bool long long,
 
54
+                                   vector unsigned long long);
 
55
+vector unsigned long long vec_eqv (vector unsigned long long,
 
56
+                                   vector bool long long);
 
57
+vector int vec_eqv (vector int, vector int);
 
58
+vector int vec_eqv (vector bool int, vector int);
 
59
+vector int vec_eqv (vector int, vector bool int);
 
60
+vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
 
61
+vector unsigned int vec_eqv (vector bool unsigned int,
 
62
+                             vector unsigned int);
 
63
+vector unsigned int vec_eqv (vector unsigned int,
 
64
+                             vector bool unsigned int);
 
65
+vector short vec_eqv (vector short, vector short);
 
66
+vector short vec_eqv (vector bool short, vector short);
 
67
+vector short vec_eqv (vector short, vector bool short);
 
68
+vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
 
69
+vector unsigned short vec_eqv (vector bool unsigned short,
 
70
+                               vector unsigned short);
 
71
+vector unsigned short vec_eqv (vector unsigned short,
 
72
+                               vector bool unsigned short);
 
73
+vector signed char vec_eqv (vector signed char, vector signed char);
 
74
+vector signed char vec_eqv (vector bool signed char, vector signed char);
 
75
+vector signed char vec_eqv (vector signed char, vector bool signed char);
 
76
+vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
 
77
+vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
 
78
+vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
 
79
+
 
80
+vector long long vec_max (vector long long, vector long long);
 
81
+vector unsigned long long vec_max (vector unsigned long long,
 
82
+                                   vector unsigned long long);
 
83
+
 
84
+vector long long vec_min (vector long long, vector long long);
 
85
+vector unsigned long long vec_min (vector unsigned long long,
 
86
+                                   vector unsigned long long);
 
87
+
 
88
+vector long long vec_nand (vector long long, vector long long);
 
89
+vector long long vec_nand (vector bool long long, vector long long);
 
90
+vector long long vec_nand (vector long long, vector bool long long);
 
91
+vector unsigned long long vec_nand (vector unsigned long long,
 
92
+                                    vector unsigned long long);
 
93
+vector unsigned long long vec_nand (vector bool long long,
 
94
+                                   vector unsigned long long);
 
95
+vector unsigned long long vec_nand (vector unsigned long long,
 
96
+                                    vector bool long long);
 
97
+vector int vec_nand (vector int, vector int);
 
98
+vector int vec_nand (vector bool int, vector int);
 
99
+vector int vec_nand (vector int, vector bool int);
 
100
+vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
 
101
+vector unsigned int vec_nand (vector bool unsigned int,
 
102
+                              vector unsigned int);
 
103
+vector unsigned int vec_nand (vector unsigned int,
 
104
+                              vector bool unsigned int);
 
105
+vector short vec_nand (vector short, vector short);
 
106
+vector short vec_nand (vector bool short, vector short);
 
107
+vector short vec_nand (vector short, vector bool short);
 
108
+vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
 
109
+vector unsigned short vec_nand (vector bool unsigned short,
 
110
+                                vector unsigned short);
 
111
+vector unsigned short vec_nand (vector unsigned short,
 
112
+                                vector bool unsigned short);
 
113
+vector signed char vec_nand (vector signed char, vector signed char);
 
114
+vector signed char vec_nand (vector bool signed char, vector signed char);
 
115
+vector signed char vec_nand (vector signed char, vector bool signed char);
 
116
+vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
 
117
+vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
 
118
+vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
 
119
+
 
120
+vector long long vec_orc (vector long long, vector long long);
 
121
+vector long long vec_orc (vector bool long long, vector long long);
 
122
+vector long long vec_orc (vector long long, vector bool long long);
 
123
+vector unsigned long long vec_orc (vector unsigned long long,
 
124
+                                   vector unsigned long long);
 
125
+vector unsigned long long vec_orc (vector bool long long,
 
126
+                                   vector unsigned long long);
 
127
+vector unsigned long long vec_orc (vector unsigned long long,
 
128
+                                   vector bool long long);
 
129
+vector int vec_orc (vector int, vector int);
 
130
+vector int vec_orc (vector bool int, vector int);
 
131
+vector int vec_orc (vector int, vector bool int);
 
132
+vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
 
133
+vector unsigned int vec_orc (vector bool unsigned int,
 
134
+                             vector unsigned int);
 
135
+vector unsigned int vec_orc (vector unsigned int,
 
136
+                             vector bool unsigned int);
 
137
+vector short vec_orc (vector short, vector short);
 
138
+vector short vec_orc (vector bool short, vector short);
 
139
+vector short vec_orc (vector short, vector bool short);
 
140
+vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
 
141
+vector unsigned short vec_orc (vector bool unsigned short,
 
142
+                               vector unsigned short);
 
143
+vector unsigned short vec_orc (vector unsigned short,
 
144
+                               vector bool unsigned short);
 
145
+vector signed char vec_orc (vector signed char, vector signed char);
 
146
+vector signed char vec_orc (vector bool signed char, vector signed char);
 
147
+vector signed char vec_orc (vector signed char, vector bool signed char);
 
148
+vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
 
149
+vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
 
150
+vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
 
151
+
 
152
+vector int vec_pack (vector long long, vector long long);
 
153
+vector unsigned int vec_pack (vector unsigned long long,
 
154
+                              vector unsigned long long);
 
155
+vector bool int vec_pack (vector bool long long, vector bool long long);
 
156
+
 
157
+vector int vec_packs (vector long long, vector long long);
 
158
+vector unsigned int vec_packs (vector unsigned long long,
 
159
+                               vector unsigned long long);
 
160
+
 
161
+vector unsigned int vec_packsu (vector long long, vector long long);
 
162
+
 
163
+vector long long vec_rl (vector long long,
 
164
+                         vector unsigned long long);
 
165
+vector long long vec_rl (vector unsigned long long,
 
166
+                         vector unsigned long long);
 
167
+
 
168
+vector long long vec_sl (vector long long, vector unsigned long long);
 
169
+vector long long vec_sl (vector unsigned long long,
 
170
+                         vector unsigned long long);
 
171
+
 
172
+vector long long vec_sr (vector long long, vector unsigned long long);
 
173
+vector unsigned long long char vec_sr (vector unsigned long long,
 
174
+                                       vector unsigned long long);
 
175
+
 
176
+vector long long vec_sra (vector long long, vector unsigned long long);
 
177
+vector unsigned long long vec_sra (vector unsigned long long,
 
178
+                                   vector unsigned long long);
 
179
+
 
180
+vector long long vec_sub (vector long long, vector long long);
 
181
+vector unsigned long long vec_sub (vector unsigned long long,
 
182
+                                   vector unsigned long long);
 
183
+
 
184
+vector long long vec_unpackh (vector int);
 
185
+vector unsigned long long vec_unpackh (vector unsigned int);
 
186
+
 
187
+vector long long vec_unpackl (vector int);
 
188
+vector unsigned long long vec_unpackl (vector unsigned int);
 
189
+
 
190
+vector long long vec_vaddudm (vector long long, vector long long);
 
191
+vector long long vec_vaddudm (vector bool long long, vector long long);
 
192
+vector long long vec_vaddudm (vector long long, vector bool long long);
 
193
+vector unsigned long long vec_vaddudm (vector unsigned long long,
 
194
+                                       vector unsigned long long);
 
195
+vector unsigned long long vec_vaddudm (vector bool unsigned long long,
 
196
+                                       vector unsigned long long);
 
197
+vector unsigned long long vec_vaddudm (vector unsigned long long,
 
198
+                                       vector bool unsigned long long);
 
199
+
 
200
+vector long long vec_vclz (vector long long);
 
201
+vector unsigned long long vec_vclz (vector unsigned long long);
 
202
+vector int vec_vclz (vector int);
 
203
+vector unsigned int vec_vclz (vector int);
 
204
+vector short vec_vclz (vector short);
 
205
+vector unsigned short vec_vclz (vector unsigned short);
 
206
+vector signed char vec_vclz (vector signed char);
 
207
+vector unsigned char vec_vclz (vector unsigned char);
 
208
+
 
209
+vector signed char vec_vclzb (vector signed char);
 
210
+vector unsigned char vec_vclzb (vector unsigned char);
 
211
+
 
212
+vector long long vec_vclzd (vector long long);
 
213
+vector unsigned long long vec_vclzd (vector unsigned long long);
 
214
+
 
215
+vector short vec_vclzh (vector short);
 
216
+vector unsigned short vec_vclzh (vector unsigned short);
 
217
+
 
218
+vector int vec_vclzw (vector int);
 
219
+vector unsigned int vec_vclzw (vector int);
 
220
+
 
221
+vector long long vec_vmaxsd (vector long long, vector long long);
 
222
+
 
223
+vector unsigned long long vec_vmaxud (vector unsigned long long,
 
224
+                                      unsigned vector long long);
 
225
+
 
226
+vector long long vec_vminsd (vector long long, vector long long);
 
227
+
 
228
+vector unsigned long long vec_vminud (vector long long,
 
229
+                                      vector long long);
 
230
+
 
231
+vector int vec_vpksdss (vector long long, vector long long);
 
232
+vector unsigned int vec_vpksdss (vector long long, vector long long);
 
233
+
 
234
+vector unsigned int vec_vpkudus (vector unsigned long long,
 
235
+                                 vector unsigned long long);
 
236
+
 
237
+vector int vec_vpkudum (vector long long, vector long long);
 
238
+vector unsigned int vec_vpkudum (vector unsigned long long,
 
239
+                                 vector unsigned long long);
 
240
+vector bool int vec_vpkudum (vector bool long long, vector bool long long);
 
241
+
 
242
+vector long long vec_vpopcnt (vector long long);
 
243
+vector unsigned long long vec_vpopcnt (vector unsigned long long);
 
244
+vector int vec_vpopcnt (vector int);
 
245
+vector unsigned int vec_vpopcnt (vector int);
 
246
+vector short vec_vpopcnt (vector short);
 
247
+vector unsigned short vec_vpopcnt (vector unsigned short);
 
248
+vector signed char vec_vpopcnt (vector signed char);
 
249
+vector unsigned char vec_vpopcnt (vector unsigned char);
 
250
+
 
251
+vector signed char vec_vpopcntb (vector signed char);
 
252
+vector unsigned char vec_vpopcntb (vector unsigned char);
 
253
+
 
254
+vector long long vec_vpopcntd (vector long long);
 
255
+vector unsigned long long vec_vpopcntd (vector unsigned long long);
 
256
+
 
257
+vector short vec_vpopcnth (vector short);
 
258
+vector unsigned short vec_vpopcnth (vector unsigned short);
 
259
+
 
260
+vector int vec_vpopcntw (vector int);
 
261
+vector unsigned int vec_vpopcntw (vector int);
 
262
+
 
263
+vector long long vec_vrld (vector long long, vector unsigned long long);
 
264
+vector unsigned long long vec_vrld (vector unsigned long long,
 
265
+                                    vector unsigned long long);
 
266
+
 
267
+vector long long vec_vsld (vector long long, vector unsigned long long);
 
268
+vector long long vec_vsld (vector unsigned long long,
 
269
+                           vector unsigned long long);
 
270
+
 
271
+vector long long vec_vsrad (vector long long, vector unsigned long long);
 
272
+vector unsigned long long vec_vsrad (vector unsigned long long,
 
273
+                                     vector unsigned long long);
 
274
+
 
275
+vector long long vec_vsrd (vector long long, vector unsigned long long);
 
276
+vector unsigned long long char vec_vsrd (vector unsigned long long,
 
277
+                                         vector unsigned long long);
 
278
+
 
279
+vector long long vec_vsubudm (vector long long, vector long long);
 
280
+vector long long vec_vsubudm (vector bool long long, vector long long);
 
281
+vector long long vec_vsubudm (vector long long, vector bool long long);
 
282
+vector unsigned long long vec_vsubudm (vector unsigned long long,
 
283
+                                       vector unsigned long long);
 
284
+vector unsigned long long vec_vsubudm (vector bool long long,
 
285
+                                       vector unsigned long long);
 
286
+vector unsigned long long vec_vsubudm (vector unsigned long long,
 
287
+                                       vector bool long long);
 
288
+
 
289
+vector long long vec_vupkhsw (vector int);
 
290
+vector unsigned long long vec_vupkhsw (vector unsigned int);
 
291
+
 
292
+vector long long vec_vupklsw (vector int);
 
293
+vector unsigned long long vec_vupklsw (vector int);
 
294
+@end smallexample
 
295
+
 
296
+If the cryptographic instructions are enabled (@option{-mcrypto} or
 
297
+@option{-mcpu=power8}), the following builtins are enabled.
 
298
+
 
299
+@smallexample
 
300
+vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
 
301
+
 
302
+vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
 
303
+                                                    vector unsigned long long);
 
304
+
 
305
+vector unsigned long long __builtin_crypto_vcipherlast
 
306
+                                     (vector unsigned long long,
 
307
+                                      vector unsigned long long);
 
308
+
 
309
+vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
 
310
+                                                     vector unsigned long long);
 
311
+
 
312
+vector unsigned long long __builtin_crypto_vncipherlast
 
313
+                                     (vector unsigned long long,
 
314
+                                      vector unsigned long long);
 
315
+
 
316
+vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
 
317
+                                                vector unsigned char,
 
318
+                                                vector unsigned char);
 
319
+
 
320
+vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
 
321
+                                                 vector unsigned short,
 
322
+                                                 vector unsigned short);
 
323
+
 
324
+vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
 
325
+                                               vector unsigned int,
 
326
+                                               vector unsigned int);
 
327
+
 
328
+vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
 
329
+                                                     vector unsigned long long,
 
330
+                                                     vector unsigned long long);
 
331
+
 
332
+vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
 
333
+                                               vector unsigned char);
 
334
+
 
335
+vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
 
336
+                                                vector unsigned short);
 
337
+
 
338
+vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
 
339
+                                              vector unsigned int);
 
340
+
 
341
+vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
 
342
+                                                    vector unsigned long long);
 
343
+
 
344
+vector unsigned long long __builtin_crypto_vshasigmad
 
345
+                               (vector unsigned long long, int, int);
 
346
+
 
347
+vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
 
348
+                                                 int, int);
 
349
+@end smallexample
 
350
+
 
351
+The second argument to the @var{__builtin_crypto_vshasigmad} and
 
352
+@var{__builtin_crypto_vshasigmaw} builtin functions must be a constant
 
353
+integer that is 0 or 1.  The third argument to these builtin functions
 
354
+must be a constant integer in the range of 0 to 15.
 
355
+
 
356
+@node PowerPC Hardware Transactional Memory Built-in Functions
 
357
+@subsection PowerPC Hardware Transactional Memory Built-in Functions
 
358
+GCC provides two interfaces for accessing the Hardware Transactional
 
359
+Memory (HTM) instructions available on some of the PowerPC family
 
360
+of prcoessors (eg, POWER8).  The two interfaces come in a low level
 
361
+interface, consisting of built-in functions specific to PowerPC and a
 
362
+higher level interface consisting of inline functions that are common
 
363
+between PowerPC and S/390.
 
364
+
 
365
+@subsubsection PowerPC HTM Low Level Built-in Functions
 
366
+
 
367
+The following low level built-in functions are available with
 
368
+@option{-mhtm} or @option{-mcpu=CPU} where CPU is `power8' or later.
 
369
+They all generate the machine instruction that is part of the name.
 
370
+
 
371
+The HTM built-ins return true or false depending on their success and
 
372
+their arguments match exactly the type and order of the associated
 
373
+hardware instruction's operands.  Refer to the ISA manual for a
 
374
+description of each instruction's operands.
 
375
+
 
376
+@smallexample
 
377
+unsigned int __builtin_tbegin (unsigned int)
 
378
+unsigned int __builtin_tend (unsigned int)
 
379
+
 
380
+unsigned int __builtin_tabort (unsigned int)
 
381
+unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
 
382
+unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
 
383
+unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
 
384
+unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
 
385
+
 
386
+unsigned int __builtin_tcheck (unsigned int)
 
387
+unsigned int __builtin_treclaim (unsigned int)
 
388
+unsigned int __builtin_trechkpt (void)
 
389
+unsigned int __builtin_tsr (unsigned int)
 
390
+@end smallexample
 
391
+
 
392
+In addition to the above HTM built-ins, we have added built-ins for
 
393
+some common extended mnemonics of the HTM instructions:
 
394
+
 
395
+@smallexample
 
396
+unsigned int __builtin_tendall (void)
 
397
+unsigned int __builtin_tresume (void)
 
398
+unsigned int __builtin_tsuspend (void)
 
399
+@end smallexample
 
400
+
 
401
+The following set of built-in functions are available to gain access
 
402
+to the HTM specific special purpose registers.
 
403
+
 
404
+@smallexample
 
405
+unsigned long __builtin_get_texasr (void)
 
406
+unsigned long __builtin_get_texasru (void)
 
407
+unsigned long __builtin_get_tfhar (void)
 
408
+unsigned long __builtin_get_tfiar (void)
 
409
+
 
410
+void __builtin_set_texasr (unsigned long);
 
411
+void __builtin_set_texasru (unsigned long);
 
412
+void __builtin_set_tfhar (unsigned long);
 
413
+void __builtin_set_tfiar (unsigned long);
 
414
+@end smallexample
 
415
+
 
416
+Example usage of these low level built-in functions may look like:
 
417
+
 
418
+@smallexample
 
419
+#include <htmintrin.h>
 
420
+
 
421
+int num_retries = 10;
 
422
+
 
423
+while (1)
 
424
+  @{
 
425
+    if (__builtin_tbegin (0))
 
426
+      @{
 
427
+        /* Transaction State Initiated.  */
 
428
+        if (is_locked (lock))
 
429
+          __builtin_tabort (0);
 
430
+        ... transaction code...
 
431
+        __builtin_tend (0);
 
432
+        break;
 
433
+      @}
 
434
+    else
 
435
+      @{
 
436
+        /* Transaction State Failed.  Use locks if the transaction
 
437
+           failure is "persistent" or we've tried too many times.  */
 
438
+        if (num_retries-- <= 0
 
439
+            || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
 
440
+          @{
 
441
+            acquire_lock (lock);
 
442
+            ... non transactional fallback path...
 
443
+            release_lock (lock);
 
444
+            break;
 
445
+          @}
 
446
+      @}
 
447
+  @}
 
448
+@end smallexample
 
449
+
 
450
+One final built-in function has been added that returns the value of
 
451
+the 2-bit Transaction State field of the Machine Status Register (MSR)
 
452
+as stored in @code{CR0}.
 
453
+
 
454
+@smallexample
 
455
+unsigned long __builtin_ttest (void)
 
456
+@end smallexample
 
457
+
 
458
+This built-in can be used to determine the current transaction state
 
459
+using the following code example:
 
460
+
 
461
+@smallexample
 
462
+#include <htmintrin.h>
 
463
+
 
464
+unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
 
465
+
 
466
+if (tx_state == _HTM_TRANSACTIONAL)
 
467
+  @{
 
468
+    /* Code to use in transactional state.  */
 
469
+  @}
 
470
+else if (tx_state == _HTM_NONTRANSACTIONAL)
 
471
+  @{
 
472
+    /* Code to use in non-transactional state.  */
 
473
+  @}
 
474
+else if (tx_state == _HTM_SUSPENDED)
 
475
+  @{
 
476
+    /* Code to use in transaction suspended state.  */
 
477
+  @}
 
478
+@end smallexample
 
479
+
 
480
+@subsubsection PowerPC HTM High Level Inline Functions
 
481
+
 
482
+The following high level HTM interface is made available by including
 
483
+@code{<htmxlintrin.h>} and using @option{-mhtm} or @option{-mcpu=CPU}
 
484
+where CPU is `power8' or later.  This interface is common between PowerPC
 
485
+and S/390, allowing users to write one HTM source implementation that
 
486
+can be compiled and executed on either system.
 
487
+
 
488
+@smallexample
 
489
+long __TM_simple_begin (void)
 
490
+long __TM_begin (void* const TM_buff)
 
491
+long __TM_end (void)
 
492
+void __TM_abort (void)
 
493
+void __TM_named_abort (unsigned char const code)
 
494
+void __TM_resume (void)
 
495
+void __TM_suspend (void)
 
496
+
 
497
+long __TM_is_user_abort (void* const TM_buff)
 
498
+long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
 
499
+long __TM_is_illegal (void* const TM_buff)
 
500
+long __TM_is_footprint_exceeded (void* const TM_buff)
 
501
+long __TM_nesting_depth (void* const TM_buff)
 
502
+long __TM_is_nested_too_deep(void* const TM_buff)
 
503
+long __TM_is_conflict(void* const TM_buff)
 
504
+long __TM_is_failure_persistent(void* const TM_buff)
 
505
+long __TM_failure_address(void* const TM_buff)
 
506
+long long __TM_failure_code(void* const TM_buff)
 
507
+@end smallexample
 
508
+
 
509
+Using these common set of HTM inline functions, we can create
 
510
+a more portable version of the HTM example in the previous
 
511
+section that will work on either PowerPC or S/390:
 
512
+
 
513
+@smallexample
 
514
+#include <htmxlintrin.h>
 
515
+
 
516
+int num_retries = 10;
 
517
+TM_buff_type TM_buff;
 
518
+
 
519
+while (1)
 
520
+  @{
 
521
+    if (__TM_begin (TM_buff))
 
522
+      @{
 
523
+        /* Transaction State Initiated.  */
 
524
+        if (is_locked (lock))
 
525
+          __TM_abort ();
 
526
+        ... transaction code...
 
527
+        __TM_end ();
 
528
+        break;
 
529
+      @}
 
530
+    else
 
531
+      @{
 
532
+        /* Transaction State Failed.  Use locks if the transaction
 
533
+           failure is "persistent" or we've tried too many times.  */
 
534
+        if (num_retries-- <= 0
 
535
+            || __TM_is_failure_persistent (TM_buff))
 
536
+          @{
 
537
+            acquire_lock (lock);
 
538
+            ... non transactional fallback path...
 
539
+            release_lock (lock);
 
540
+            break;
 
541
+          @}
 
542
+      @}
 
543
+  @}
 
544
+@end smallexample
 
545
+
 
546
 @node RX Built-in Functions
 
547
 @subsection RX Built-in Functions
 
548
 GCC supports some of the RX instructions which cannot be expressed in
 
549
--- a/src/gcc/doc/invoke.texi
 
550
+++ b/src/gcc/doc/invoke.texi
 
551
@@ -855,7 +855,12 @@
 
552
 -mno-recip-precision @gol
 
553
 -mveclibabi=@var{type} -mfriz -mno-friz @gol
 
554
 -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
 
555
--msave-toc-indirect -mno-save-toc-indirect}
 
556
+-msave-toc-indirect -mno-save-toc-indirect @gol
 
557
+-mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol
 
558
+-mcrypto -mno-crypto -mdirect-move -mno-direct-move @gol
 
559
+-mquad-memory -mno-quad-memory @gol
 
560
+-mquad-memory-atomic -mno-quad-memory-atomic @gol
 
561
+-mcompat-align-parm -mno-compat-align-parm}
 
562
 
 
563
 @emph{RX Options}
 
564
 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
 
565
@@ -17237,7 +17242,9 @@
 
566
 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
 
567
 -mpopcntb -mpopcntd  -mpowerpc64 @gol
 
568
 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
 
569
--msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx}
 
570
+-msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx @gol
 
571
+-mcrypto -mdirect-move -mpower8-fusion -mpower8-vector @gol
 
572
+-mquad-memory -mquad-memory-atomic}
 
573
 
 
574
 The particular options set for any particular CPU varies between
 
575
 compiler versions, depending on what setting seems to produce optimal
 
576
@@ -17288,6 +17295,38 @@
 
577
 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
 
578
 enhancements.
 
579
 
 
580
+When @option{-maltivec} is used, rather than @option{-maltivec=le} or
 
581
+@option{-maltivec=be}, the element order for Altivec intrinsics such
 
582
+as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will
 
583
+match array element order corresponding to the endianness of the
 
584
+target.  That is, element zero identifies the leftmost element in a
 
585
+vector register when targeting a big-endian platform, and identifies
 
586
+the rightmost element in a vector register when targeting a
 
587
+little-endian platform.
 
588
+
 
589
+@item -maltivec=be
 
590
+@opindex maltivec=be
 
591
+Generate Altivec instructions using big-endian element order,
 
592
+regardless of whether the target is big- or little-endian.  This is
 
593
+the default when targeting a big-endian platform.
 
594
+
 
595
+The element order is used to interpret element numbers in Altivec
 
596
+intrinsics such as @code{vec_splat}, @code{vec_extract}, and
 
597
+@code{vec_insert}.  By default, these will match array element order
 
598
+corresponding to the endianness for the target.
 
599
+
 
600
+@item -maltivec=le
 
601
+@opindex maltivec=le
 
602
+Generate Altivec instructions using little-endian element order,
 
603
+regardless of whether the target is big- or little-endian.  This is
 
604
+the default when targeting a little-endian platform.  This option is
 
605
+currently ignored when targeting a big-endian platform.
 
606
+
 
607
+The element order is used to interpret element numbers in Altivec
 
608
+intrinsics such as @code{vec_splat}, @code{vec_extract}, and
 
609
+@code{vec_insert}.  By default, these will match array element order
 
610
+corresponding to the endianness for the target.
 
611
+
 
612
 @item -mvrsave
 
613
 @itemx -mno-vrsave
 
614
 @opindex mvrsave
 
615
@@ -17355,6 +17394,55 @@
 
616
 instructions, and also enable the use of built-in functions that allow
 
617
 more direct access to the VSX instruction set.
 
618
 
 
619
+@item -mcrypto
 
620
+@itemx -mno-crypto
 
621
+@opindex mcrypto
 
622
+@opindex mno-crypto
 
623
+Enable the use (disable) of the built-in functions that allow direct
 
624
+access to the cryptographic instructions that were added in version
 
625
+2.07 of the PowerPC ISA.
 
626
+
 
627
+@item -mdirect-move
 
628
+@itemx -mno-direct-move
 
629
+@opindex mdirect-move
 
630
+@opindex mno-direct-move
 
631
+Generate code that uses (does not use) the instructions to move data
 
632
+between the general purpose registers and the vector/scalar (VSX)
 
633
+registers that were added in version 2.07 of the PowerPC ISA.
 
634
+
 
635
+@item -mpower8-fusion
 
636
+@itemx -mno-power8-fusion
 
637
+@opindex mpower8-fusion
 
638
+@opindex mno-power8-fusion
 
639
+Generate code that keeps (does not keeps) some integer operations
 
640
+adjacent so that the instructions can be fused together on power8 and
 
641
+later processors.
 
642
+
 
643
+@item -mpower8-vector
 
644
+@itemx -mno-power8-vector
 
645
+@opindex mpower8-vector
 
646
+@opindex mno-power8-vector
 
647
+Generate code that uses (does not use) the vector and scalar
 
648
+instructions that were added in version 2.07 of the PowerPC ISA.  Also
 
649
+enable the use of built-in functions that allow more direct access to
 
650
+the vector instructions.
 
651
+
 
652
+@item -mquad-memory
 
653
+@itemx -mno-quad-memory
 
654
+@opindex mquad-memory
 
655
+@opindex mno-quad-memory
 
656
+Generate code that uses (does not use) the non-atomic quad word memory
 
657
+instructions.  The @option{-mquad-memory} option requires use of
 
658
+64-bit mode.
 
659
+
 
660
+@item -mquad-memory-atomic
 
661
+@itemx -mno-quad-memory-atomic
 
662
+@opindex mquad-memory-atomic
 
663
+@opindex mno-quad-memory-atomic
 
664
+Generate code that uses (does not use) the atomic quad word memory
 
665
+instructions.  The @option{-mquad-memory-atomic} option requires use of
 
666
+64-bit mode.
 
667
+
 
668
 @item -mfloat-gprs=@var{yes/single/double/no}
 
669
 @itemx -mfloat-gprs
 
670
 @opindex mfloat-gprs
 
671
@@ -17774,7 +17862,8 @@
 
672
 @opindex mabi
 
673
 Extend the current ABI with a particular extension, or remove such extension.
 
674
 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
 
675
-@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
 
676
+@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble},
 
677
+@var{elfv1}, @var{elfv2}@.
 
678
 
 
679
 @item -mabi=spe
 
680
 @opindex mabi=spe
 
681
@@ -17796,6 +17885,20 @@
 
682
 Change the current ABI to use IEEE extended-precision long double.
 
683
 This is a PowerPC 32-bit Linux ABI option.
 
684
 
 
685
+@item -mabi=elfv1
 
686
+@opindex mabi=elfv1
 
687
+Change the current ABI to use the ELFv1 ABI.
 
688
+This is the default ABI for big-endian PowerPC 64-bit Linux.
 
689
+Overriding the default ABI requires special system support and is
 
690
+likely to fail in spectacular ways.
 
691
+
 
692
+@item -mabi=elfv2
 
693
+@opindex mabi=elfv2
 
694
+Change the current ABI to use the ELFv2 ABI.
 
695
+This is the default ABI for little-endian PowerPC 64-bit Linux.
 
696
+Overriding the default ABI requires special system support and is
 
697
+likely to fail in spectacular ways.
 
698
+
 
699
 @item -mprototype
 
700
 @itemx -mno-prototype
 
701
 @opindex mprototype
 
702
@@ -18081,6 +18184,23 @@
 
703
 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
 
704
 saved in the prologue, it is saved just before the call through the
 
705
 pointer.  The @option{-mno-save-toc-indirect} option is the default.
 
706
+
 
707
+@item -mcompat-align-parm
 
708
+@itemx -mno-compat-align-parm
 
709
+@opindex mcompat-align-parm
 
710
+Generate (do not generate) code to pass structure parameters with a
 
711
+maximum alignment of 64 bits, for compatibility with older versions
 
712
+of GCC.
 
713
+
 
714
+Older versions of GCC (prior to 4.9.0) incorrectly did not align a
 
715
+structure parameter on a 128-bit boundary when that structure contained
 
716
+a member requiring 128-bit alignment.  This is corrected in more
 
717
+recent versions of GCC.  This option may be used to generate code
 
718
+that is compatible with functions compiled with older versions of
 
719
+GCC.
 
720
+
 
721
+In this version of the compiler, the @option{-mcompat-align-parm}
 
722
+is the default, except when using the Linux ELFv2 ABI.
 
723
 @end table
 
724
 
 
725
 @node RX Options
 
726
--- a/src/gcc/doc/md.texi
 
727
+++ b/src/gcc/doc/md.texi
 
728
@@ -2055,7 +2055,7 @@
 
729
 
 
730
 @end table
 
731
 
 
732
-@item PowerPC and IBM RS6000---@file{config/rs6000/rs6000.h}
 
733
+@item PowerPC and IBM RS6000---@file{config/rs6000/constraints.md}
 
734
 @table @code
 
735
 @item b
 
736
 Address base register
 
737
@@ -2069,18 +2069,58 @@
 
738
 @item v
 
739
 Altivec vector register
 
740
 
 
741
+@item wa
 
742
+Any VSX register if the -mvsx option was used or NO_REGS.
 
743
+
 
744
 @item wd
 
745
-VSX vector register to hold vector double data
 
746
+VSX vector register to hold vector double data or NO_REGS.
 
747
 
 
748
 @item wf
 
749
-VSX vector register to hold vector float data
 
750
+VSX vector register to hold vector float data or NO_REGS.
 
751
 
 
752
+@item wg
 
753
+If @option{-mmfpgpr} was used, a floating point register or NO_REGS.
 
754
+
 
755
+@item wl
 
756
+Floating point register if the LFIWAX instruction is enabled or NO_REGS.
 
757
+
 
758
+@item wm
 
759
+VSX register if direct move instructions are enabled, or NO_REGS.
 
760
+
 
761
+@item wn
 
762
+No register (NO_REGS).
 
763
+
 
764
+@item wr
 
765
+General purpose register if 64-bit instructions are enabled or NO_REGS.
 
766
+
 
767
 @item ws
 
768
-VSX vector register to hold scalar float data
 
769
+VSX vector register to hold scalar double values or NO_REGS.
 
770
 
 
771
-@item wa
 
772
-Any VSX register
 
773
+@item wt
 
774
+VSX vector register to hold 128 bit integer or NO_REGS.
 
775
 
 
776
+@item wu
 
777
+Altivec register to use for float/32-bit int loads/stores  or NO_REGS.
 
778
+
 
779
+@item wv
 
780
+Altivec register to use for double loads/stores  or NO_REGS.
 
781
+
 
782
+@item ww
 
783
+FP or VSX register to perform float operations under @option{-mvsx} or NO_REGS.
 
784
+
 
785
+@item wx
 
786
+Floating point register if the STFIWX instruction is enabled or NO_REGS.
 
787
+
 
788
+@item wy
 
789
+VSX vector register to hold scalar float values or NO_REGS.
 
790
+
 
791
+@item wz
 
792
+Floating point register if the LFIWZX instruction is enabled or NO_REGS.
 
793
+
 
794
+@item wQ
 
795
+A memory address that will work with the @code{lq} and @code{stq}
 
796
+instructions.
 
797
+
 
798
 @item h
 
799
 @samp{MQ}, @samp{CTR}, or @samp{LINK} register
 
800