File 0001-s390x-assembly-pack-perlasm-support.patch of Package openssl-1_1
xxxxxxxxxx
1
From c66bb88cb08adbc848271dd388aa9695c7e200be Mon Sep 17 00:00:00 2001
2
From: Patrick Steuer <patrick.steuer@de.ibm.com>
3
Date: Wed, 7 Dec 2016 12:58:34 +0100
4
Subject: [PATCH] s390x assembly pack: perlasm support.
5
6
Added crypto/perlasm/s390x.pm Perl module. Its primary use is to be
7
independent of binutils version, that is to write byte codes of
8
instructions that are not part of the base instruction set.
9
Currently only gas format is supported.
10
11
Signed-off-by: Patrick Steuer <patrick.steuer@de.ibm.com>
12
13
Reviewed-by: Tim Hudson <tjh@openssl.org>
14
Reviewed-by: Richard Levitte <levitte@openssl.org>
15
(Merged from https://github.com/openssl/openssl/pull/6919)
16
---
17
crypto/perlasm/s390x.pm | 3060 +++++++++++++++++++++++++++++++++++++++
18
1 file changed, 3060 insertions(+)
19
create mode 100644 crypto/perlasm/s390x.pm
20
21
diff --git a/crypto/perlasm/s390x.pm b/crypto/perlasm/s390x.pm
22
new file mode 100644
23
index 0000000000..5f3a49dd0c
24
--- /dev/null
25
+++ b/crypto/perlasm/s390x.pm
26
27
+#!/usr/bin/env perl
28
+# Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
29
+#
30
+# Licensed under the OpenSSL license (the "License"). You may not use
31
+# this file except in compliance with the License. You can obtain a copy
32
+# in the file LICENSE in the source distribution or at
33
+# https://www.openssl.org/source/license.html
34
+
35
+# Copyright IBM Corp. 2018
36
+# Author: Patrick Steuer <patrick.steuer@de.ibm.com>
37
+
38
+package perlasm::s390x;
39
+
40
+use strict;
41
+use warnings;
42
+use Carp qw(confess);
43
+use Exporter qw(import);
44
+
45
+our @EXPORT=qw(PERLASM_BEGIN PERLASM_END);
46
+our @EXPORT_OK=qw(AUTOLOAD LABEL INCLUDE stfle);
47
+our %EXPORT_TAGS=(
48
+ MSA => [qw(kmac km kmc kimd klmd)],
49
+ MSA4 => [qw(kmf kmo pcc kmctr)],
50
+ MSA5 => [qw(ppno prno)],
51
+ MSA8 => [qw(kma)],
52
+ VX => [qw(vgef vgeg vgbm vzero vone vgm vgmb vgmh vgmf vgmg
53
+ vl vlr vlrep vlrepb vlreph vlrepf vlrepg vleb vleh vlef vleg vleib
54
+ vleih vleif vleig vlgv vlgvb vlgvh vlgvf vlgvg vllez vllezb vllezh
55
+ vllezf vllezg vlm vlbb vlvg vlvgb vlvgh vlvgf vlvgg vlvgp
56
+ vll vmrh vmrhb vmrhh vmrhf vmrhg vmrl vmrlb vmrlh vmrlf vmrlg vpk
57
+ vpkh vpkf vpkg vpks vpksh vpksf vpksg vpkshs vpksfs vpksgs vpkls
58
+ vpklsh vpklsf vpklsg vpklshs vpklsfs vpklsgs vperm vpdi vrep vrepb
59
+ vreph vrepf vrepg vrepi vrepib vrepih vrepif vrepig vscef vsceg
60
+ vsel vseg vsegb vsegh vsegf vst vsteb vsteh vstef vsteg vstm vstl
61
+ vuph vuphb vuphh vuphf vuplh vuplhb vuplhh vuplhf vupl vuplb vuplhw
62
+ vuplf vupll vupllb vupllh vupllf va vab vah vaf vag vaq vacc vaccb
63
+ vacch vaccf vaccg vaccq vac vacq vaccc vacccq vn vnc vavg vavgb
64
+ vavgh vavgf vavgg vavgl vavglb vavglh vavglf vavglg vcksm vec_ vecb
65
+ vech vecf vecg vecl veclb veclh veclf veclg vceq vceqb vceqh vceqf
66
+ vceqg vceqbs vceqhs vceqfs vceqgs vch vchb vchh vchf vchg vchbs
67
+ vchhs vchfs vchgs vchl vchlb vchlh vchlf vchlg vchlbs vchlhs vchlfs
68
+ vchlgs vclz vclzb vclzh vclzf vclzg vctz vctzb vctzh vctzf vctzg
69
+ vx vgfm vgfmb vgfmh vgfmf vgfmg vgfma vgfmab vgfmah vgfmaf vgfmag
70
+ vlc vlcb vlch vlcf vlcg vlp vlpb vlph vlpf vlpg vmx vmxb vmxh vmxf
71
+ vmxg vmxl vmxlb vmxlh vmxlf vmxlg vmn vmnb vmnh vmnf vmng vmnl
72
+ vmnlb vmnlh vmnlf vmnlg vmal vmalb vmalhw vmalf vmah vmahb vmahh
73
+ vmahf vmalh vmalhb vmalhh vmalhf vmae vmaeb vmaeh vmaef vmale
74
+ vmaleb vmaleh vmalef vmao vmaob vmaoh vmaof vmalo vmalob vmaloh
75
+ vmalof vmh vmhb vmhh vmhf vmlh vmlhb vmlhh vmlhf vml vmlb vmlhw
76
+ vmlf vme vmeb vmeh vmef vmle vmleb vmleh vmlef vmo vmob vmoh vmof
77
+ vmlo vmlob vmloh vmlof vno vnot vo vpopct verllv verllvb verllvh
78
+ verllvf verllvg verll verllb verllh verllf verllg verim verimb
79
+ verimh verimf verimg veslv veslvb veslvh veslvf veslvg vesl veslb
80
+ veslh veslf veslg vesrav vesravb vesravh vesravf vesravg vesra
81
+ vesrab vesrah vesraf vesrag vesrlv vesrlvb vesrlvh vesrlvf vesrlvg
82
+ vesrl vesrlb vesrlh vesrlf vesrlg vsl vslb vsldb vsra vsrab vsrl
83
+ vsrlb vs vsb vsh vsf vsg vsq vscbi vscbib vscbih vscbif vscbig
84
+ vscbiq vsbi vsbiq vsbcbi vsbcbiq vsumg vsumgh vsumgf vsumq vsumqf
85
+ vsumqg vsum vsumb vsumh vtm vfae vfaeb vfaeh vfaef vfaebs vfaehs
86
+ vfaefs vfaezb vfaezh vfaezf vfaezbs vfaezhs vfaezfs vfee vfeeb
87
+ vfeeh vfeef vfeebs vfeehs vfeefs vfeezb vfeezh vfeezf vfeezbs
88
+ vfeezhs vfeezfs vfene vfeneb vfeneh vfenef vfenebs vfenehs vfenefs
89
+ vfenezb vfenezh vfenezf vfenezbs vfenezhs vfenezfs vistr vistrb
90
+ vistrh vistrf vistrbs vistrhs vistrfs vstrc vstrcb vstrch vstrcf
91
+ vstrcbs vstrchs vstrcfs vstrczb vstrczh vstrczf vstrczbs vstrczhs
92
+ vstrczfs vfa vfadb wfadb wfc wfcdb wfk wfkdb vfce vfcedb wfcedb
93
+ vfcedbs wfcedbs vfch vfchdb wfchdb vfchdbs wfchdbs vfche vfchedb
94
+ wfchedb vfchedbs wfchedbs vcdg vcdgb wcdgb vcdlg vcdlgb wcdlgb vcgd
95
+ vcgdb wcgdb vclgd vclgdb wclgdb vfd vfddb wfddb vfi vfidb wfidb
96
+ vlde vldeb wldeb vled vledb wledb vfm vfmdb wfmdb vfma vfmadb
97
+ wfmadb vfms vfmsdb wfmsdb vfpso vfpsodb wfpsodb vflcdb wflcdb
98
+ vflndb wflndb vflpdb wflpdb vfsq vfsqdb wfsqdb vfs vfsdb wfsdb
99
+ vftci vftcidb wftcidb)],
100
+ VXE => [qw(vbperm vllezlf vmsl vmslg vnx vnn voc vpopctb vpopcth
101
+ vpopctf vpopctg vfasb wfasb wfaxb wfcsb wfcxb wfksb wfkxb vfcesb
102
+ vfcesbs wfcesb wfcesbs wfcexb wfcexbs vfchsb vfchsbs wfchsb wfchsbs
103
+ wfchxb wfchxbs vfchesb vfchesbs wfchesb wfchesbs wfchexb wfchexbs
104
+ vfdsb wfdsb wfdxb vfisb wfisb wfixb vfll vflls wflls wflld vflr
105
+ vflrd wflrd wflrx vfmax vfmaxsb vfmaxdb wfmaxsb wfmaxdb wfmaxxb
106
+ vfmin vfminsb vfmindb wfminsb wfmindb wfminxb vfmsb wfmsb wfmxb
107
+ vfnma vfnms vfmasb wfmasb wfmaxb vfmssb wfmssb wfmsxb vfnmasb
108
+ vfnmadb wfnmasb wfnmadb wfnmaxb vfnmssb vfnmsdb wfnmssb wfnmsdb
109
+ wfnmsxb vfpsosb wfpsosb vflcsb wflcsb vflnsb wflnsb vflpsb wflpsb
110
+ vfpsoxb wfpsoxb vflcxb wflcxb vflnxb wflnxb vflpxb wflpxb vfsqsb
111
+ wfsqsb wfsqxb vfssb wfssb wfsxb vftcisb wftcisb wftcixb)],
112
+ VXD => [qw(vlrlr vlrl vstrlr vstrl vap vcp vcvb vcvbg vcvd vcvdg vdp
113
+ vlip vmp vmsp vpkz vpsop vrp vsdp vsrp vsp vtp vupkz)],
114
+);
115
+Exporter::export_ok_tags(qw(MSA MSA4 MSA5 MSA8 VX VXE VXD));
116
+
117
+our $AUTOLOAD;
118
+
119
+my $GR='(?:%r)?([0-9]|1[0-5])';
120
+my $VR='(?:%v)?([0-9]|1[0-9]|2[0-9]|3[0-1])';
121
+
122
+my ($file,$out);
123
+
124
+sub PERLASM_BEGIN
125
+{
126
+ ($file,$out)=(shift,"");
127
+}
128
+sub PERLASM_END
129
+{
130
+ if (defined($file)) {
131
+ open(my $fd,'>',$file)||die("can't open $file: $!");
132
+ print({$fd}$out);
133
+ close($fd);
134
+ } else {
135
+ print($out);
136
+ }
137
+}
138
+
139
+sub AUTOLOAD {
140
+ confess(err("PARSE")) if (grep(!defined($_),@_));
141
+ my $token;
142
+ for ($AUTOLOAD) {
143
+ $token=".$1" if (/^.*::([A-Z_]+)$/); # uppercase: directive
144
+ $token="\t$1" if (/^.*::([a-z]+)$/); # lowercase: mnemonic
145
+ confess(err("PARSE")) if (!defined($token));
146
+ }
147
+ $token.="\t" if ($#_>=0);
148
+ $out.=$token.join(',',@_)."\n";
149
+}
150
+
151
+sub LABEL { # label directive
152
+ confess(err("ARGNUM")) if ($#_!=0);
153
+ my ($label)=@_;
154
+ $out.="$label:\n";
155
+}
156
+
157
+sub INCLUDE {
158
+ confess(err("ARGNUM")) if ($#_!=0);
159
+ my ($file)=@_;
160
+ $out.="#include \"$file\"\n";
161
+}
162
+
163
+#
164
+# Mnemonics
165
+#
166
+
167
+sub stfle {
168
+ confess(err("ARGNUM")) if ($#_!=0);
169
+ S(0xb2b0,@_);
170
+}
171
+
172
+# MSA
173
+
174
+sub kmac {
175
+ confess(err("ARGNUM")) if ($#_!=1);
176
+ RRE(0xb91e,@_);
177
+}
178
+
179
+sub km {
180
+ confess(err("ARGNUM")) if ($#_!=1);
181
+ RRE(0xb92e,@_);
182
+}
183
+
184
+sub kmc {
185
+ confess(err("ARGNUM")) if ($#_!=1);
186
+ RRE(0xb92f,@_);
187
+}
188
+
189
+sub kimd {
190
+ confess(err("ARGNUM")) if ($#_!=1);
191
+ RRE(0xb93e,@_);
192
+}
193
+
194
+sub klmd {
195
+ confess(err("ARGNUM")) if ($#_!=1);
196
+ RRE(0xb93f,@_);
197
+}
198
+
199
+# MSA4
200
+
201
+sub kmf {
202
+ confess(err("ARGNUM")) if ($#_!=1);
203
+ RRE(0xb92a,@_);
204
+}
205
+
206
+sub kmo {
207
+ confess(err("ARGNUM")) if ($#_!=1);
208
+ RRE(0xb92b,@_);
209
+}
210
+
211
+sub pcc {
212
+ confess(err("ARGNUM")) if ($#_!=-1);
213
+ RRE(0xb92c,@_);
214
+}
215
+
216
+sub kmctr {
217
+ confess(err("ARGNUM")) if ($#_!=2);
218
+ RRFb(0xb92d,@_);
219
+}
220
+
221
+# MSA5
222
+
223
+sub prno {
224
+ ppno(@_);
225
+}
226
+
227
+sub ppno { # deprecated, use prno
228
+ confess(err("ARGNUM")) if ($#_!=1);
229
+ RRE(0xb93c,@_);
230
+}
231
+
232
+# MSA8
233
+
234
+sub kma {
235
+ confess(err("ARGNUM")) if ($#_!=2);
236
+ RRFb(0xb929,@_);
237
+}
238
+
239
+# VX - Support Instructions
240
+
241
+sub vgef {
242
+ confess(err("ARGNUM")) if ($#_!=2);
243
+ VRV(0xe713,@_);
244
+}
245
+sub vgeg {
246
+ confess(err("ARGNUM")) if ($#_!=2);
247
+ VRV(0xe712,@_);
248
+}
249
+
250
+sub vgbm {
251
+ confess(err("ARGNUM")) if ($#_!=1);
252
+ VRIa(0xe744,@_);
253
+}
254
+sub vzero {
255
+ vgbm(@_,0);
256
+}
257
+sub vone {
258
+ vgbm(@_,0xffff);
259
+}
260
+
261
+sub vgm {
262
+ confess(err("ARGNUM")) if ($#_!=3);
263
+ VRIb(0xe746,@_);
264
+}
265
+sub vgmb {
266
+ vgm(@_,0);
267
+}
268
+sub vgmh {
269
+ vgm(@_,1);
270
+}
271
+sub vgmf {
272
+ vgm(@_,2);
273
+}
274
+sub vgmg {
275
+ vgm(@_,3);
276
+}
277
+
278
+sub vl {
279
+ confess(err("ARGNUM")) if ($#_!=1);
280
+ VRX(0xe706,@_);
281
+}
282
+
283
+sub vlr {
284
+ confess(err("ARGNUM")) if ($#_!=1);
285
+ VRRa(0xe756,@_);
286
+}
287
+
288
+sub vlrep {
289
+ confess(err("ARGNUM")) if ($#_!=2);
290
+ VRX(0xe705,@_);
291
+}
292
+sub vlrepb {
293
+ vlrep(@_,0);
294
+}
295
+sub vlreph {
296
+ vlrep(@_,1);
297
+}
298
+sub vlrepf {
299
+ vlrep(@_,2);
300
+}
301
+sub vlrepg {
302
+ vlrep(@_,3);
303
+}
304
+
305
+sub vleb {
306
+ confess(err("ARGNUM")) if ($#_!=2);
307
+ VRX(0xe700,@_);
308
+}
309
+sub vleh {
310
+ confess(err("ARGNUM")) if ($#_!=2);
311
+ VRX(0xe701,@_);
312
+}
313
+sub vlef {
314
+ confess(err("ARGNUM")) if ($#_!=2);
315
+ VRX(0xe703,@_);
316
+}
317
+sub vleg {
318
+ confess(err("ARGNUM")) if ($#_!=2);
319
+ VRX(0xe702,@_);
320
+}
321
+
322
+sub vleib {
323
+ confess(err("ARGNUM")) if ($#_!=2);
324
+ VRIa(0xe740,@_);
325
+}
326
+sub vleih {
327
+ confess(err("ARGNUM")) if ($#_!=2);
328
+ VRIa(0xe741,@_);
329
+}
330
+sub vleif {
331
+ confess(err("ARGNUM")) if ($#_!=2);
332
+ VRIa(0xe743,@_);
333
+}
334
+sub vleig {
335
+ confess(err("ARGNUM")) if ($#_!=2);
336
+ VRIa(0xe742,@_);
337
+}
338
+
339
+sub vlgv {
340
+ confess(err("ARGNUM")) if ($#_!=3);
341
+ VRSc(0xe721,@_);
342
+}
343
+sub vlgvb {
344
+ vlgv(@_,0);
345
+}
346
+sub vlgvh {
347
+ vlgv(@_,1);
348
+}
349
+sub vlgvf {
350
+ vlgv(@_,2);
351
+}
352
+sub vlgvg {
353
+ vlgv(@_,3);
354
+}
355
+
356
+sub vllez {
357
+ confess(err("ARGNUM")) if ($#_!=2);
358
+ VRX(0xe704,@_);
359
+}
360
+sub vllezb {
361
+ vllez(@_,0);
362
+}
363
+sub vllezh {
364
+ vllez(@_,1);
365
+}
366
+sub vllezf {
367
+ vllez(@_,2);
368
+}
369
+sub vllezg {
370
+ vllez(@_,3);
371
+}
372
+
373
+sub vlm {
374
+ confess(err("ARGNUM")) if ($#_!=2);
375
+ VRSa(0xe736,@_);
376
+}
377
+
378
+sub vlbb {
379
+ confess(err("ARGNUM")) if ($#_!=2);
380
+ VRX(0xe707,@_);
381
+}
382
+
383
+sub vlvg {
384
+ confess(err("ARGNUM")) if ($#_!=3);
385
+ VRSb(0xe722,@_);
386
+}
387
+sub vlvgb {
388
+ vlvg(@_,0);
389
+}
390
+sub vlvgh {
391
+ vlvg(@_,1);
392
+}
393
+sub vlvgf {
394
+ vlvg(@_,2);
395
+}
396
+sub vlvgg {
397
+ vlvg(@_,3);
398
+}
399
+
400
+sub vlvgp {
401
+ confess(err("ARGNUM")) if ($#_!=2);
402
+ VRRf(0xe762,@_);
403
+}
404
+
405
+sub vll {
406
+ confess(err("ARGNUM")) if ($#_!=2);
407
+ VRSb(0xe737,@_);
408
+}
409
+
410
+sub vmrh {
411
+ confess(err("ARGNUM")) if ($#_!=3);
412
+ VRRc(0xe761,@_);
413
+}
414
+sub vmrhb {
415
+ vmrh(@_,0);
416
+}
417
+sub vmrhh {
418
+ vmrh(@_,1);
419
+}
420
+sub vmrhf {
421
+ vmrh(@_,2);
422
+}
423
+sub vmrhg {
424
+ vmrh(@_,3);
425
+}
426
+
427
+sub vmrl {
428
+ confess(err("ARGNUM")) if ($#_!=3);
429
+ VRRc(0xe760,@_);
430
+}
431
+sub vmrlb {
432
+ vmrl(@_,0);
433
+}
434
+sub vmrlh {
435
+ vmrl(@_,1);
436
+}
437
+sub vmrlf {
438
+ vmrl(@_,2);
439
+}
440
+sub vmrlg {
441
+ vmrl(@_,3);
442
+}
443
+
444
+sub vpk {
445
+ confess(err("ARGNUM")) if ($#_!=3);
446
+ VRRc(0xe794,@_);
447
+}
448
+sub vpkh {
449
+ vpk(@_,1);
450
+}
451
+sub vpkf {
452
+ vpk(@_,2);
453
+}
454
+sub vpkg {
455
+ vpk(@_,3);
456
+}
457
+
458
+sub vpks {
459
+ confess(err("ARGNUM")) if ($#_!=4);
460
+ VRRb(0xe797,@_);
461
+}
462
+sub vpksh {
463
+ vpks(@_,1,0);
464
+}
465
+sub vpksf {
466
+ vpks(@_,2,0);
467
+}
468
+sub vpksg {
469
+ vpks(@_,3,0);
470
+}
471
+sub vpkshs {
472
+ vpks(@_,1,1);
473
+}
474
+sub vpksfs {
475
+ vpks(@_,2,1);
476
+}
477
+sub vpksgs {
478
+ vpks(@_,3,1);
479
+}
480
+
481
+sub vpkls {
482
+ confess(err("ARGNUM")) if ($#_!=4);
483
+ VRRb(0xe795,@_);
484
+}
485
+sub vpklsh {
486
+ vpkls(@_,1,0);
487
+}
488
+sub vpklsf {
489
+ vpkls(@_,2,0);
490
+}
491
+sub vpklsg {
492
+ vpkls(@_,3,0);
493
+}
494
+sub vpklshs {
495
+ vpkls(@_,1,1);
496
+}
497
+sub vpklsfs {
498
+ vpkls(@_,2,1);
499
+}
500
+sub vpklsgs {
501
+ vpkls(@_,3,1);
502
+}
503
+
504
+sub vperm {
505
+ confess(err("ARGNUM")) if ($#_!=3);
506
+ VRRe(0xe78c,@_);
507
+}
508
+
509
+sub vpdi {
510
+ confess(err("ARGNUM")) if ($#_!=3);
511
+ VRRc(0xe784,@_);
512
+}
513
+
514
+sub vrep {
515
+ confess(err("ARGNUM")) if ($#_!=3);
516
+ VRIc(0xe74d,@_);
517
+}
518
+sub vrepb {
519
+ vrep(@_,0);
520
+}
521
+sub vreph {
522
+ vrep(@_,1);
523
+}
524
+sub vrepf {
525
+ vrep(@_,2);
526
+}
527
+sub vrepg {
528
+ vrep(@_,3);
529
+}
530
+
531
+sub vrepi {
532
+ confess(err("ARGNUM")) if ($#_!=2);
533
+ VRIa(0xe745,@_);
534
+}
535
+sub vrepib {
536
+ vrepi(@_,0);
537
+}
538
+sub vrepih {
539
+ vrepi(@_,1);
540
+}
541
+sub vrepif {
542
+ vrepi(@_,2);
543
+}
544
+sub vrepig {
545
+ vrepi(@_,3);
546
+}
547
+
548
+sub vscef {
549
+ confess(err("ARGNUM")) if ($#_!=2);
550
+ VRV(0xe71b,@_);
551
+}
552
+sub vsceg {
553
+ confess(err("ARGNUM")) if ($#_!=2);
554
+ VRV(0xe71a,@_);
555
+}
556
+
557
+sub vsel {
558
+ confess(err("ARGNUM")) if ($#_!=3);
559
+ VRRe(0xe78d,@_);
560
+}
561
+
562
+sub vseg {
563
+ confess(err("ARGNUM")) if ($#_!=2);
564
+ VRRa(0xe75f,@_);
565
+}
566
+sub vsegb {
567
+ vseg(@_,0);
568
+}
569
+sub vsegh {
570
+ vseg(@_,1);
571
+}
572
+sub vsegf {
573
+ vseg(@_,2);
574
+}
575
+
576
+sub vst {
577
+ confess(err("ARGNUM")) if ($#_!=1);
578
+ VRX(0xe70e,@_);
579
+}
580
+
581
+sub vsteb {
582
+ confess(err("ARGNUM")) if ($#_!=2);
583
+ VRX(0xe708,@_);
584
+}
585
+sub vsteh {
586
+ confess(err("ARGNUM")) if ($#_!=2);
587
+ VRX(0xe709,@_);
588
+}
589
+sub vstef {
590
+ confess(err("ARGNUM")) if ($#_!=2);
591
+ VRX(0xe70b,@_);
592
+}
593
+sub vsteg {
594
+ confess(err("ARGNUM")) if ($#_!=2);
595
+ VRX(0xe70a,@_);
596
+}
597
+
598
+sub vstm {
599
+ confess(err("ARGNUM")) if ($#_!=2);
600
+ VRSa(0xe73e,@_);
601
+}
602
+
603
+sub vstl {
604
+ confess(err("ARGNUM")) if ($#_!=2);
605
+ VRSb(0xe73f,@_);
606
+}
607
+
608
+sub vuph {
609
+ confess(err("ARGNUM")) if ($#_!=2);
610
+ VRRa(0xe7d7,@_);
611
+}
612
+sub vuphb {
613
+ vuph(@_,0);
614
+}
615
+sub vuphh {
616
+ vuph(@_,1);
617
+}
618
+sub vuphf {
619
+ vuph(@_,2);
620
+}
621
+
622
+sub vuplh {
623
+ confess(err("ARGNUM")) if ($#_!=2);
624
+ VRRa(0xe7d5,@_);
625
+}
626
+sub vuplhb {
627
+ vuplh(@_,0);
628
+}
629
+sub vuplhh {
630
+ vuplh(@_,1);
631
+}
632
+sub vuplhf {
633
+ vuplh(@_,2);
634
+}
635
+
636
+sub vupl {
637
+ confess(err("ARGNUM")) if ($#_!=2);
638
+ VRRa(0xe7d6,@_);
639
+}
640
+sub vuplb {
641
+ vupl(@_,0);
642
+}
643
+sub vuplhw {
644
+ vupl(@_,1);
645
+}
646
+sub vuplf {
647
+ vupl(@_,2);
648
+}
649
+
650
+sub vupll {
651
+ confess(err("ARGNUM")) if ($#_!=2);
652
+ VRRa(0xe7d4,@_);
653
+}
654
+sub vupllb {
655
+ vupll(@_,0);
656
+}
657
+sub vupllh {
658
+ vupll(@_,1);
659
+}
660
+sub vupllf {
661
+ vupll(@_,2);
662
+}
663
+
664
+# VX - Integer Instructions
665
+
666
+sub va {
667
+ confess(err("ARGNUM")) if ($#_!=3);
668
+ VRRc(0xe7f3,@_);
669
+}
670
+sub vab {
671
+ va(@_,0);
672
+}
673
+sub vah {
674
+ va(@_,1);
675
+}
676
+sub vaf {
677
+ va(@_,2);
678
+}
679
+sub vag {
680
+ va(@_,3);
681
+}
682
+sub vaq {
683
+ va(@_,4);
684
+}
685
+
686
+sub vacc {
687
+ confess(err("ARGNUM")) if ($#_!=3);
688
+ VRRc(0xe7f1,@_);
689
+}
690
+sub vaccb {
691
+ vacc(@_,0);
692
+}
693
+sub vacch {
694
+ vacc(@_,1);
695
+}
696
+sub vaccf {
697
+ vacc(@_,2);
698
+}
699
+sub vaccg {
700
+ vacc(@_,3);
701
+}
702
+sub vaccq {
703
+ vacc(@_,4);
704
+}
705
+
706
+sub vac {
707
+ confess(err("ARGNUM")) if ($#_!=4);
708
+ VRRd(0xe7bb,@_);
709
+}
710
+sub vacq {
711
+ vac(@_,4);
712
+}
713
+
714
+sub vaccc {
715
+ confess(err("ARGNUM")) if ($#_!=4);
716
+ VRRd(0xe7b9,@_);
717
+}
718
+sub vacccq {
719
+ vaccc(@_,4);
720
+}
721
+
722
+sub vn {
723
+ confess(err("ARGNUM")) if ($#_!=2);
724
+ VRRc(0xe768,@_);
725
+}
726
+
727
+sub vnc {
728
+ confess(err("ARGNUM")) if ($#_!=2);
729
+ VRRc(0xe769,@_);
730
+}
731
+
732
+sub vavg {
733
+ confess(err("ARGNUM")) if ($#_!=3);
734
+ VRRc(0xe7f2,@_);
735
+}
736
+sub vavgb {
737
+ vavg(@_,0);
738
+}
739
+sub vavgh {
740
+ vavg(@_,1);
741
+}
742
+sub vavgf {
743
+ vavg(@_,2);
744
+}
745
+sub vavgg {
746
+ vavg(@_,3);
747
+}
748
+
749
+sub vavgl {
750
+ confess(err("ARGNUM")) if ($#_!=3);
751
+ VRRc(0xe7f0,@_);
752
+}
753
+sub vavglb {
754
+ vavgl(@_,0);
755
+}
756
+sub vavglh {
757
+ vavgl(@_,1);
758
+}
759
+sub vavglf {
760
+ vavgl(@_,2);
761
+}
762
+sub vavglg {
763
+ vavgl(@_,3);
764
+}
765
+
766
+sub vcksm {
767
+ confess(err("ARGNUM")) if ($#_!=2);
768
+ VRRc(0xe766,@_);
769
+}
770
+
771
+sub vec_ {
772
+ confess(err("ARGNUM")) if ($#_!=2);
773
+ VRRa(0xe7db,@_);
774
+}
775
+sub vecb {
776
+ vec_(@_,0);
777
+}
778
+sub vech {
779
+ vec_(@_,1);
780
+}
781
+sub vecf {
782
+ vec_(@_,2);
783
+}
784
+sub vecg {
785
+ vec_(@_,3);
786
+}
787
+
788
+sub vecl {
789
+ confess(err("ARGNUM")) if ($#_!=2);
790
+ VRRa(0xe7d9,@_);
791
+}
792
+sub veclb {
793
+ vecl(@_,0);
794
+}
795
+sub veclh {
796
+ vecl(@_,1);
797
+}
798
+sub veclf {
799
+ vecl(@_,2);
800
+}
801
+sub veclg {
802
+ vecl(@_,3);
803
+}
804
+
805
+sub vceq {
806
+ confess(err("ARGNUM")) if ($#_!=4);
807
+ VRRb(0xe7f8,@_);
808
+}
809
+sub vceqb {
810
+ vceq(@_,0,0);
811
+}
812
+sub vceqh {
813
+ vceq(@_,1,0);
814
+}
815
+sub vceqf {
816
+ vceq(@_,2,0);
817
+}
818
+sub vceqg {
819
+ vceq(@_,3,0);
820
+}
821
+sub vceqbs {
822
+ vceq(@_,0,1);
823
+}
824
+sub vceqhs {
825
+ vceq(@_,1,1);
826
+}
827
+sub vceqfs {
828
+ vceq(@_,2,1);
829
+}
830
+sub vceqgs {
831
+ vceq(@_,3,1);
832
+}
833
+
834
+sub vch {
835
+ confess(err("ARGNUM")) if ($#_!=4);
836
+ VRRb(0xe7fb,@_);
837
+}
838
+sub vchb {
839
+ vch(@_,0,0);
840
+}
841
+sub vchh {
842
+ vch(@_,1,0);
843
+}
844
+sub vchf {
845
+ vch(@_,2,0);
846
+}
847
+sub vchg {
848
+ vch(@_,3,0);
849
+}
850
+sub vchbs {
851
+ vch(@_,0,1);
852
+}
853
+sub vchhs {
854
+ vch(@_,1,1);
855
+}
856
+sub vchfs {
857
+ vch(@_,2,1);
858
+}
859
+sub vchgs {
860
+ vch(@_,3,1);
861
+}
862
+
863
+sub vchl {
864
+ confess(err("ARGNUM")) if ($#_!=4);
865
+ VRRb(0xe7f9,@_);
866
+}
867
+sub vchlb {
868
+ vchl(@_,0,0);
869
+}
870
+sub vchlh {
871
+ vchl(@_,1,0);
872
+}
873
+sub vchlf {
874
+ vchl(@_,2,0);
875
+}
876
+sub vchlg {
877
+ vchl(@_,3,0);
878
+}
879
+sub vchlbs {
880
+ vchl(@_,0,1);
881
+}
882
+sub vchlhs {
883
+ vchl(@_,1,1);
884
+}
885
+sub vchlfs {
886
+ vchl(@_,2,1);
887
+}
888
+sub vchlgs {
889
+ vchl(@_,3,1);
890
+}
891
+
892
+sub vclz {
893
+ confess(err("ARGNUM")) if ($#_!=2);
894
+ VRRa(0xe753,@_);
895
+}
896
+sub vclzb {
897
+ vclz(@_,0);
898
+}
899
+sub vclzh {
900
+ vclz(@_,1);
901
+}
902
+sub vclzf {
903
+ vclz(@_,2);
904
+}
905
+sub vclzg {
906
+ vclz(@_,3);
907
+}
908
+
909
+sub vctz {
910
+ confess(err("ARGNUM")) if ($#_!=2);
911
+ VRRa(0xe752,@_);
912
+}
913
+sub vctzb {
914
+ vctz(@_,0);
915
+}
916
+sub vctzh {
917
+ vctz(@_,1);
918
+}
919
+sub vctzf {
920
+ vctz(@_,2);
921
+}
922
+sub vctzg {
923
+ vctz(@_,3);
924
+}
925
+
926
+sub vx {
927
+ confess(err("ARGNUM")) if ($#_!=2);
928
+ VRRc(0xe76d,@_);
929
+}
930
+
931
+sub vgfm {
932
+ confess(err("ARGNUM")) if ($#_!=3);
933
+ VRRc(0xe7b4,@_);
934
+}
935
+sub vgfmb {
936
+ vgfm(@_,0);
937
+}
938
+sub vgfmh {
939
+ vgfm(@_,1);
940
+}
941
+sub vgfmf {
942
+ vgfm(@_,2);
943
+}
944
+sub vgfmg {
945
+ vgfm(@_,3);
946
+}
947
+
948
+sub vgfma {
949
+ confess(err("ARGNUM")) if ($#_!=4);
950
+ VRRd(0xe7bc,@_);
951
+}
952
+sub vgfmab {
953
+ vgfma(@_,0);
954
+}
955
+sub vgfmah {
956
+ vgfma(@_,1);
957
+}
958
+sub vgfmaf {
959
+ vgfma(@_,2);
960
+}
961
+sub vgfmag {
962
+ vgfma(@_,3);
963
+}
964
+
965
+sub vlc {
966
+ confess(err("ARGNUM")) if ($#_!=2);
967
+ VRRa(0xe7de,@_);
968
+}
969
+sub vlcb {
970
+ vlc(@_,0);
971
+}
972
+sub vlch {
973
+ vlc(@_,1);
974
+}
975
+sub vlcf {
976
+ vlc(@_,2);
977
+}
978
+sub vlcg {
979
+ vlc(@_,3);
980
+}
981
+
982
+sub vlp {
983
+ confess(err("ARGNUM")) if ($#_!=2);
984
+ VRRa(0xe7df,@_);
985
+}
986
+sub vlpb {
987
+ vlp(@_,0);
988
+}
989
+sub vlph {
990
+ vlp(@_,1);
991
+}
992
+sub vlpf {
993
+ vlp(@_,2);
994
+}
995
+sub vlpg {
996
+ vlp(@_,3);
997
+}
998
+
999
+sub vmx {
1000
+ confess(err("ARGNUM")) if ($#_!=3);
1001
+ VRRc(0xe7ff,@_);
1002
+}
1003
+sub vmxb {
1004
+ vmx(@_,0);
1005
+}
1006
+sub vmxh {
1007
+ vmx(@_,1);
1008
+}
1009
+sub vmxf {
1010
+ vmx(@_,2);
1011
+}
1012
+sub vmxg {
1013
+ vmx(@_,3);
1014
+}
1015
+
1016
+sub vmxl {
1017
+ confess(err("ARGNUM")) if ($#_!=3);
1018
+ VRRc(0xe7fd,@_);
1019
+}
1020
+sub vmxlb {
1021
+ vmxl(@_,0);
1022
+}
1023
+sub vmxlh {
1024
+ vmxl(@_,1);
1025
+}
1026
+sub vmxlf {
1027
+ vmxl(@_,2);
1028
+}
1029
+sub vmxlg {
1030
+ vmxl(@_,3);
1031
+}
1032
+
1033
+sub vmn {
1034
+ confess(err("ARGNUM")) if ($#_!=3);
1035
+ VRRc(0xe7fe,@_);
1036
+}
1037
+sub vmnb {
1038
+ vmn(@_,0);
1039
+}
1040
+sub vmnh {
1041
+ vmn(@_,1);
1042
+}
1043
+sub vmnf {
1044
+ vmn(@_,2);
1045
+}
1046
+sub vmng {
1047
+ vmn(@_,3);
1048
+}
1049
+
1050
+sub vmnl {
1051
+ confess(err("ARGNUM")) if ($#_!=3);
1052
+ VRRc(0xe7fc,@_);
1053
+}
1054
+sub vmnlb {
1055
+ vmnl(@_,0);
1056
+}
1057
+sub vmnlh {
1058
+ vmnl(@_,1);
1059
+}
1060
+sub vmnlf {
1061
+ vmnl(@_,2);
1062
+}
1063
+sub vmnlg {
1064
+ vmnl(@_,3);
1065
+}
1066
+
1067
+sub vmal {
1068
+ confess(err("ARGNUM")) if ($#_!=4);
1069
+ VRRd(0xe7aa,@_);
1070
+}
1071
+sub vmalb {
1072
+ vmal(@_,0);
1073
+}
1074
+sub vmalhw {
1075
+ vmal(@_,1);
1076
+}
1077
+sub vmalf {
1078
+ vmal(@_,2);
1079
+}
1080
+
1081
+sub vmah {
1082
+ confess(err("ARGNUM")) if ($#_!=4);
1083
+ VRRd(0xe7ab,@_);
1084
+}
1085
+sub vmahb {
1086
+ vmah(@_,0);
1087
+}
1088
+sub vmahh {
1089
+ vmah(@_,1);
1090
+}
1091
+sub vmahf {
1092
+ vmah(@_,2);
1093
+}
1094
+
1095
+sub vmalh {
1096
+ confess(err("ARGNUM")) if ($#_!=4);
1097
+ VRRd(0xe7a9,@_);
1098
+}
1099
+sub vmalhb {
1100
+ vmalh(@_,0);
1101
+}
1102
+sub vmalhh {
1103
+ vmalh(@_,1);
1104
+}
1105
+sub vmalhf {
1106
+ vmalh(@_,2);
1107
+}
1108
+
1109
+sub vmae {
1110
+ confess(err("ARGNUM")) if ($#_!=4);
1111
+ VRRd(0xe7ae,@_);
1112
+}
1113
+sub vmaeb {
1114
+ vmae(@_,0);
1115
+}
1116
+sub vmaeh {
1117
+ vmae(@_,1);
1118
+}
1119
+sub vmaef {
1120
+ vmae(@_,2);
1121
+}
1122
+
1123
+sub vmale {
1124
+ confess(err("ARGNUM")) if ($#_!=4);
1125
+ VRRd(0xe7ac,@_);
1126
+}
1127
+sub vmaleb {
1128
+ vmale(@_,0);
1129
+}
1130
+sub vmaleh {
1131
+ vmale(@_,1);
1132
+}
1133
+sub vmalef {
1134
+ vmale(@_,2);
1135
+}
1136
+
1137
+sub vmao {
1138
+ confess(err("ARGNUM")) if ($#_!=4);
1139
+ VRRd(0xe7af,@_);
1140
+}
1141
+sub vmaob {
1142
+ vmao(@_,0);
1143
+}
1144
+sub vmaoh {
1145
+ vmao(@_,1);
1146
+}
1147
+sub vmaof {
1148
+ vmao(@_,2);
1149
+}
1150
+
1151
+sub vmalo {
1152
+ confess(err("ARGNUM")) if ($#_!=4);
1153
+ VRRd(0xe7ad,@_);
1154
+}
1155
+sub vmalob {
1156
+ vmalo(@_,0);
1157
+}
1158
+sub vmaloh {
1159
+ vmalo(@_,1);
1160
+}
1161
+sub vmalof {
1162
+ vmalo(@_,2);
1163
+}
1164
+
1165
+sub vmh {
1166
+ confess(err("ARGNUM")) if ($#_!=3);
1167
+ VRRc(0xe7a3,@_);
1168
+}
1169
+sub vmhb {
1170
+ vmh(@_,0);
1171
+}
1172
+sub vmhh {
1173
+ vmh(@_,1);
1174
+}
1175
+sub vmhf {
1176
+ vmh(@_,2);
1177
+}
1178
+
1179
+sub vmlh {
1180
+ confess(err("ARGNUM")) if ($#_!=3);
1181
+ VRRc(0xe7a1,@_);
1182
+}
1183
+sub vmlhb {
1184
+ vmlh(@_,0);
1185
+}
1186
+sub vmlhh {
1187
+ vmlh(@_,1);
1188
+}
1189
+sub vmlhf {
1190
+ vmlh(@_,2);
1191
+}
1192
+
1193
+sub vml {
1194
+ confess(err("ARGNUM")) if ($#_!=3);
1195
+ VRRc(0xe7a2,@_);
1196
+}
1197
+sub vmlb {
1198
+ vml(@_,0);
1199
+}
1200
+sub vmlhw {
1201
+ vml(@_,1);
1202
+}
1203
+sub vmlf {
1204
+ vml(@_,2);
1205
+}
1206
+
1207
+sub vme {
1208
+ confess(err("ARGNUM")) if ($#_!=3);
1209
+ VRRc(0xe7a6,@_);
1210
+}
1211
+sub vmeb {
1212
+ vme(@_,0);
1213
+}
1214
+sub vmeh {
1215
+ vme(@_,1);
1216
+}
1217
+sub vmef {
1218
+ vme(@_,2);
1219
+}
1220
+
1221
+sub vmle {
1222
+ confess(err("ARGNUM")) if ($#_!=3);
1223
+ VRRc(0xe7a4,@_);
1224
+}
1225
+sub vmleb {
1226
+ vmle(@_,0);
1227
+}
1228
+sub vmleh {
1229
+ vmle(@_,1);
1230
+}
1231
+sub vmlef {
1232
+ vmle(@_,2);
1233
+}
1234
+
1235
+sub vmo {
1236
+ confess(err("ARGNUM")) if ($#_!=3);
1237
+ VRRc(0xe7a7,@_);
1238
+}
1239
+sub vmob {
1240
+ vmo(@_,0);
1241
+}
1242
+sub vmoh {
1243
+ vmo(@_,1);
1244
+}
1245
+sub vmof {
1246
+ vmo(@_,2);
1247
+}
1248
+
1249
+sub vmlo {
1250
+ confess(err("ARGNUM")) if ($#_!=3);
1251
+ VRRc(0xe7a5,@_);
1252
+}
1253
+sub vmlob {
1254
+ vmlo(@_,0);
1255
+}
1256
+sub vmloh {
1257
+ vmlo(@_,1);
1258
+}
1259
+sub vmlof {
1260
+ vmlo(@_,2);
1261
+}
1262
+
1263
+sub vno {
1264
+ confess(err("ARGNUM")) if ($#_!=2);
1265
+ VRRc(0xe76b,@_);
1266
+}
1267
+sub vnot {
1268
+ vno(@_,$_[1]);
1269
+}
1270
+
1271
+sub vo {
1272
+ confess(err("ARGNUM")) if ($#_!=2);
1273
+ VRRc(0xe76a,@_);
1274
+}
1275
+
1276
+sub vpopct {
1277
+ confess(err("ARGNUM")) if ($#_!=2);
1278
+ VRRa(0xe750,@_);
1279
+}
1280
+
1281
+sub verllv {
1282
+ confess(err("ARGNUM")) if ($#_!=3);
1283
+ VRRc(0xe773,@_);
1284
+}
1285
+sub verllvb {
1286
+ verllv(@_,0);
1287
+}
1288
+sub verllvh {
1289
+ verllv(@_,1);
1290
+}
1291
+sub verllvf {
1292
+ verllv(@_,2);
1293
+}
1294
+sub verllvg {
1295
+ verllv(@_,3);
1296
+}
1297
+
1298
+sub verll {
1299
+ confess(err("ARGNUM")) if ($#_!=3);
1300
+ VRSa(0xe733,@_);
1301
+}
1302
+sub verllb {
1303
+ verll(@_,0);
1304
+}
1305
+sub verllh {
1306
+ verll(@_,1);
1307
+}
1308
+sub verllf {
1309
+ verll(@_,2);
1310
+}
1311
+sub verllg {
1312
+ verll(@_,3);
1313
+}
1314
+
1315
+sub verim {
1316
+ confess(err("ARGNUM")) if ($#_!=4);
1317
+ VRId(0xe772,@_);
1318
+}
1319
+sub verimb {
1320
+ verim(@_,0);
1321
+}
1322
+sub verimh {
1323
+ verim(@_,1);
1324
+}
1325
+sub verimf {
1326
+ verim(@_,2);
1327
+}
1328
+sub verimg {
1329
+ verim(@_,3);
1330
+}
1331
+
1332
+sub veslv {
1333
+ confess(err("ARGNUM")) if ($#_!=3);
1334
+ VRRc(0xe770,@_);
1335
+}
1336
+sub veslvb {
1337
+ veslv(@_,0);
1338
+}
1339
+sub veslvh {
1340
+ veslv(@_,1);
1341
+}
1342
+sub veslvf {
1343
+ veslv(@_,2);
1344
+}
1345
+sub veslvg {
1346
+ veslv(@_,3);
1347
+}
1348
+
1349
+sub vesl {
1350
+ confess(err("ARGNUM")) if ($#_!=3);
1351
+ VRSa(0xe730,@_);
1352
+}
1353
+sub veslb {
1354
+ vesl(@_,0);
1355
+}
1356
+sub veslh {
1357
+ vesl(@_,1);
1358
+}
1359
+sub veslf {
1360
+ vesl(@_,2);
1361
+}
1362
+sub veslg {
1363
+ vesl(@_,3);
1364
+}
1365
+
1366
+sub vesrav {
1367
+ confess(err("ARGNUM")) if ($#_!=3);
1368
+ VRRc(0xe77a,@_);
1369
+}
1370
+sub vesravb {
1371
+ vesrav(@_,0);
1372
+}
1373
+sub vesravh {
1374
+ vesrav(@_,1);
1375
+}
1376
+sub vesravf {
1377
+ vesrav(@_,2);
1378
+}
1379
+sub vesravg {
1380
+ vesrav(@_,3);
1381
+}
1382
+
1383
+sub vesra {
1384
+ confess(err("ARGNUM")) if ($#_!=3);
1385
+ VRSa(0xe73a,@_);
1386
+}
1387
+sub vesrab {
1388
+ vesra(@_,0);
1389
+}
1390
+sub vesrah {
1391
+ vesra(@_,1);
1392
+}
1393
+sub vesraf {
1394
+ vesra(@_,2);
1395
+}
1396
+sub vesrag {
1397
+ vesra(@_,3);
1398
+}
1399
+
1400
+sub vesrlv {
1401
+ confess(err("ARGNUM")) if ($#_!=3);
1402
+ VRRc(0xe778,@_);
1403
+}
1404
+sub vesrlvb {
1405
+ vesrlv(@_,0);
1406
+}
1407
+sub vesrlvh {
1408
+ vesrlv(@_,1);
1409
+}
1410
+sub vesrlvf {
1411
+ vesrlv(@_,2);
1412
+}
1413
+sub vesrlvg {
1414
+ vesrlv(@_,3);
1415
+}
1416
+
1417
+sub vesrl {
1418
+ confess(err("ARGNUM")) if ($#_!=3);
1419
+ VRSa(0xe738,@_);
1420
+}
1421
+sub vesrlb {
1422
+ vesrl(@_,0);
1423
+}
1424
+sub vesrlh {
1425
+ vesrl(@_,1);
1426
+}
1427
+sub vesrlf {
1428
+ vesrl(@_,2);
1429
+}
1430
+sub vesrlg {
1431
+ vesrl(@_,3);
1432
+}
1433
+
1434
+sub vsl {
1435
+ confess(err("ARGNUM")) if ($#_!=2);
1436
+ VRRc(0xe774,@_);
1437
+}
1438
+
1439
+sub vslb {
1440
+ confess(err("ARGNUM")) if ($#_!=2);
1441
+ VRRc(0xe775,@_);
1442
+}
1443
+
1444
+sub vsldb {
1445
+ confess(err("ARGNUM")) if ($#_!=3);
1446
+ VRId(0xe777,@_);
1447
+}
1448
+
1449
+sub vsra {
1450
+ confess(err("ARGNUM")) if ($#_!=2);
1451
+ VRRc(0xe77e,@_);
1452
+}
1453
+
1454
+sub vsrab {
1455
+ confess(err("ARGNUM")) if ($#_!=2);
1456
+ VRRc(0xe77f,@_);
1457
+}
1458
+
1459
+sub vsrl {
1460
+ confess(err("ARGNUM")) if ($#_!=2);
1461
+ VRRc(0xe77c,@_);
1462
+}
1463
+
1464
+sub vsrlb {
1465
+ confess(err("ARGNUM")) if ($#_!=2);
1466
+ VRRc(0xe77d,@_);
1467
+}
1468
+
1469
+sub vs {
1470
+ confess(err("ARGNUM")) if ($#_!=3);
1471
+ VRRc(0xe7f7,@_);
1472
+}
1473
+sub vsb {
1474
+ vs(@_,0);
1475
+}
1476
+sub vsh {
1477
+ vs(@_,1);
1478
+}
1479
+sub vsf {
1480
+ vs(@_,2);
1481
+}
1482
+sub vsg {
1483
+ vs(@_,3);
1484
+}
1485
+sub vsq {
1486
+ vs(@_,4);
1487
+}
1488
+
1489
+sub vscbi {
1490
+ confess(err("ARGNUM")) if ($#_!=3);
1491
+ VRRc(0xe7f5,@_);
1492
+}
1493
+sub vscbib {
1494
+ vscbi(@_,0);
1495
+}
1496
+sub vscbih {
1497
+ vscbi(@_,1);
1498
+}
1499
+sub vscbif {
1500
+ vscbi(@_,2);
1501
+}
1502
+sub vscbig {
1503
+ vscbi(@_,3);
1504
+}
1505
+sub vscbiq {
1506
+ vscbi(@_,4);
1507
+}
1508
+
1509
+sub vsbi {
1510
+ confess(err("ARGNUM")) if ($#_!=4);
1511
+ VRRd(0xe7bf,@_);
1512
+}
1513
+sub vsbiq {
1514
+ vsbi(@_,4);
1515
+}
1516
+
1517
+sub vsbcbi {
1518
+ confess(err("ARGNUM")) if ($#_!=4);
1519
+ VRRd(0xe7bd,@_);
1520
+}
1521
+sub vsbcbiq {
1522
+ vsbcbi(@_,4);
1523
+}
1524
+
1525
+sub vsumg {
1526
+ confess(err("ARGNUM")) if ($#_!=3);
1527
+ VRRc(0xe765,@_);
1528
+}
1529
+sub vsumgh {
1530
+ vsumg(@_,1);
1531
+}
1532
+sub vsumgf {
1533
+ vsumg(@_,2);
1534
+}
1535
+
1536
+sub vsumq {
1537
+ confess(err("ARGNUM")) if ($#_!=3);
1538
+ VRRc(0xe767,@_);
1539
+}
1540
+sub vsumqf {
1541
+ vsumq(@_,2);
1542
+}
1543
+sub vsumqg {
1544
+ vsumq(@_,3);
1545
+}
1546
+
1547
+sub vsum {
1548
+ confess(err("ARGNUM")) if ($#_!=3);
1549
+ VRRc(0xe764,@_);
1550
+}
1551
+sub vsumb {
1552
+ vsum(@_,0);
1553
+}
1554
+sub vsumh {
1555
+ vsum(@_,1);
1556
+}
1557
+
1558
+sub vtm {
1559
+ confess(err("ARGNUM")) if ($#_!=1);
1560
+ VRRa(0xe7d8,@_);
1561
+}
1562
+
1563
+# VX - String Instructions
1564
+
1565
+sub vfae {
1566
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
1567
+ VRRb(0xe782,@_);
1568
+}
1569
+sub vfaeb {
1570
+ vfae(@_[0..2],0,$_[3]);
1571
+}
1572
+sub vfaeh {
1573
+ vfae(@_[0..2],1,$_[3]);
1574
+}
1575
+sub vfaef {
1576
+ vfae(@_[0..2],2,$_[3]);
1577
+}
1578
+sub vfaebs {
1579
+ $_[3]=0 if (!defined($_[3]));
1580
+ vfae(@_[0..2],0,0x1|$_[3]);
1581
+}
1582
+sub vfaehs {
1583
+ $_[3]=0 if (!defined($_[3]));
1584
+ vfae(@_[0..2],1,0x1|$_[3]);
1585
+}
1586
+sub vfaefs {
1587
+ $_[3]=0 if (!defined($_[3]));
1588
+ vfae(@_[0..2],2,0x1|$_[3]);
1589
+}
1590
+sub vfaezb {
1591
+ $_[3]=0 if (!defined($_[3]));
1592
+ vfae(@_[0..2],0,0x2|$_[3]);
1593
+}
1594
+sub vfaezh {
1595
+ $_[3]=0 if (!defined($_[3]));
1596
+ vfae(@_[0..2],1,0x2|$_[3]);
1597
+}
1598
+sub vfaezf {
1599
+ $_[3]=0 if (!defined($_[3]));
1600
+ vfae(@_[0..2],2,0x2|$_[3]);
1601
+}
1602
+sub vfaezbs {
1603
+ $_[3]=0 if (!defined($_[3]));
1604
+ vfae(@_[0..2],0,0x3|$_[3]);
1605
+}
1606
+sub vfaezhs {
1607
+ $_[3]=0 if (!defined($_[3]));
1608
+ vfae(@_[0..2],1,0x3|$_[3]);
1609
+}
1610
+sub vfaezfs {
1611
+ $_[3]=0 if (!defined($_[3]));
1612
+ vfae(@_[0..2],2,0x3|$_[3]);
1613
+}
1614
+
1615
+sub vfee {
1616
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
1617
+ VRRb(0xe780,@_);
1618
+}
1619
+sub vfeeb {
1620
+ vfee(@_[0..2],0,$_[3]);
1621
+}
1622
+sub vfeeh {
1623
+ vfee(@_[0..2],1,$_[3]);
1624
+}
1625
+sub vfeef {
1626
+ vfee(@_[0..2],2,$_[3]);
1627
+}
1628
+sub vfeebs {
1629
+ vfee(@_,0,1);
1630
+}
1631
+sub vfeehs {
1632
+ vfee(@_,1,1);
1633
+}
1634
+sub vfeefs {
1635
+ vfee(@_,2,1);
1636
+}
1637
+sub vfeezb {
1638
+ vfee(@_,0,2);
1639
+}
1640
+sub vfeezh {
1641
+ vfee(@_,1,2);
1642
+}
1643
+sub vfeezf {
1644
+ vfee(@_,2,2);
1645
+}
1646
+sub vfeezbs {
1647
+ vfee(@_,0,3);
1648
+}
1649
+sub vfeezhs {
1650
+ vfee(@_,1,3);
1651
+}
1652
+sub vfeezfs {
1653
+ vfee(@_,2,3);
1654
+}
1655
+
1656
+sub vfene {
1657
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
1658
+ VRRb(0xe781,@_);
1659
+}
1660
+sub vfeneb {
1661
+ vfene(@_[0..2],0,$_[3]);
1662
+}
1663
+sub vfeneh {
1664
+ vfene(@_[0..2],1,$_[3]);
1665
+}
1666
+sub vfenef {
1667
+ vfene(@_[0..2],2,$_[3]);
1668
+}
1669
+sub vfenebs {
1670
+ vfene(@_,0,1);
1671
+}
1672
+sub vfenehs {
1673
+ vfene(@_,1,1);
1674
+}
1675
+sub vfenefs {
1676
+ vfene(@_,2,1);
1677
+}
1678
+sub vfenezb {
1679
+ vfene(@_,0,2);
1680
+}
1681
+sub vfenezh {
1682
+ vfene(@_,1,2);
1683
+}
1684
+sub vfenezf {
1685
+ vfene(@_,2,2);
1686
+}
1687
+sub vfenezbs {
1688
+ vfene(@_,0,3);
1689
+}
1690
+sub vfenezhs {
1691
+ vfene(@_,1,3);
1692
+}
1693
+sub vfenezfs {
1694
+ vfene(@_,2,3);
1695
+}
1696
+
1697
+sub vistr {
1698
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
1699
+ VRRa(0xe75c,@_[0..2],0,$_[3]);
1700
+}
1701
+sub vistrb {
1702
+ vistr(@_[0..1],0,$_[2]);
1703
+}
1704
+sub vistrh {
1705
+ vistr(@_[0..1],1,$_[2]);
1706
+}
1707
+sub vistrf {
1708
+ vistr(@_[0..1],2,$_[2]);
1709
+}
1710
+sub vistrbs {
1711
+ vistr(@_,0,1);
1712
+}
1713
+sub vistrhs {
1714
+ vistr(@_,1,1);
1715
+}
1716
+sub vistrfs {
1717
+ vistr(@_,2,1);
1718
+}
1719
+
1720
+sub vstrc {
1721
+ confess(err("ARGNUM")) if ($#_<4||$#_>5);
1722
+ VRRd(0xe78a,@_);
1723
+}
1724
+sub vstrcb {
1725
+ vstrc(@_[0..3],0,$_[4]);
1726
+}
1727
+sub vstrch {
1728
+ vstrc(@_[0..3],1,$_[4]);
1729
+}
1730
+sub vstrcf {
1731
+ vstrc(@_[0..3],2,$_[4]);
1732
+}
1733
+sub vstrcbs {
1734
+ $_[4]=0 if (!defined($_[4]));
1735
+ vstrc(@_[0..3],0,0x1|$_[4]);
1736
+}
1737
+sub vstrchs {
1738
+ $_[4]=0 if (!defined($_[4]));
1739
+ vstrc(@_[0..3],1,0x1|$_[4]);
1740
+}
1741
+sub vstrcfs {
1742
+ $_[4]=0 if (!defined($_[4]));
1743
+ vstrc(@_[0..3],2,0x1|$_[4]);
1744
+}
1745
+sub vstrczb {
1746
+ $_[4]=0 if (!defined($_[4]));
1747
+ vstrc(@_[0..3],0,0x2|$_[4]);
1748
+}
1749
+sub vstrczh {
1750
+ $_[4]=0 if (!defined($_[4]));
1751
+ vstrc(@_[0..3],1,0x2|$_[4]);
1752
+}
1753
+sub vstrczf {
1754
+ $_[4]=0 if (!defined($_[4]));
1755
+ vstrc(@_[0..3],2,0x2|$_[4]);
1756
+}
1757
+sub vstrczbs {
1758
+ $_[4]=0 if (!defined($_[4]));
1759
+ vstrc(@_[0..3],0,0x3|$_[4]);
1760
+}
1761
+sub vstrczhs {
1762
+ $_[4]=0 if (!defined($_[4]));
1763
+ vstrc(@_[0..3],1,0x3|$_[4]);
1764
+}
1765
+sub vstrczfs {
1766
+ $_[4]=0 if (!defined($_[4]));
1767
+ vstrc(@_[0..3],2,0x3|$_[4]);
1768
+}
1769
+
1770
+# VX - Floating-point Instructions
1771
+
1772
+sub vfa {
1773
+ confess(err("ARGNUM")) if ($#_!=4);
1774
+ VRRc(0xe7e3,@_);
1775
+}
1776
+sub vfadb {
1777
+ vfa(@_,3,0);
1778
+}
1779
+sub wfadb {
1780
+ vfa(@_,3,8);
1781
+}
1782
+
1783
+sub wfc {
1784
+ confess(err("ARGNUM")) if ($#_!=3);
1785
+ VRRa(0xe7cb,@_);
1786
+}
1787
+sub wfcdb {
1788
+ wfc(@_,3,0);
1789
+}
1790
+
1791
+sub wfk {
1792
+ confess(err("ARGNUM")) if ($#_!=3);
1793
+ VRRa(0xe7ca,@_);
1794
+}
1795
+sub wfksb {
1796
+ wfk(@_,2,0);
1797
+}
1798
+sub wfkdb {
1799
+ wfk(@_,3,0);
1800
+}
1801
+sub wfkxb {
1802
+ wfk(@_,4,0);
1803
+}
1804
+
1805
+sub vfce {
1806
+ confess(err("ARGNUM")) if ($#_!=5);
1807
+ VRRc(0xe7e8,@_);
1808
+}
1809
+sub vfcedb {
1810
+ vfce(@_,3,0,0);
1811
+}
1812
+sub vfcedbs {
1813
+ vfce(@_,3,0,1);
1814
+}
1815
+sub wfcedb {
1816
+ vfce(@_,3,8,0);
1817
+}
1818
+sub wfcedbs {
1819
+ vfce(@_,3,8,1);
1820
+}
1821
+
1822
+sub vfch {
1823
+ confess(err("ARGNUM")) if ($#_!=5);
1824
+ VRRc(0xe7eb,@_);
1825
+}
1826
+sub vfchdb {
1827
+ vfch(@_,3,0,0);
1828
+}
1829
+sub vfchdbs {
1830
+ vfch(@_,3,0,1);
1831
+}
1832
+sub wfchdb {
1833
+ vfch(@_,3,8,0);
1834
+}
1835
+sub wfchdbs {
1836
+ vfch(@_,3,8,1);
1837
+}
1838
+
1839
+sub vfche {
1840
+ confess(err("ARGNUM")) if ($#_!=5);
1841
+ VRRc(0xe7ea,@_);
1842
+}
1843
+sub vfchedb {
1844
+ vfche(@_,3,0,0);
1845
+}
1846
+sub vfchedbs {
1847
+ vfche(@_,3,0,1);
1848
+}
1849
+sub wfchedb {
1850
+ vfche(@_,3,8,0);
1851
+}
1852
+sub wfchedbs {
1853
+ vfche(@_,3,8,1);
1854
+}
1855
+
1856
+sub vcdg {
1857
+ confess(err("ARGNUM")) if ($#_!=4);
1858
+ VRRa(0xe7c3,@_);
1859
+}
1860
+sub vcdgb {
1861
+ vcdg(@_[0..1],3,@_[2..3]);
1862
+}
1863
+sub wcdgb {
1864
+ vcdg(@_[0..1],3,0x8|$_[2],$_[3]);
1865
+}
1866
+
1867
+sub vcdlg {
1868
+ confess(err("ARGNUM")) if ($#_!=4);
1869
+ VRRa(0xe7c1,@_);
1870
+}
1871
+sub vcdlgb {
1872
+ vcdlg(@_[0..1],3,@_[2..3]);
1873
+}
1874
+sub wcdlgb {
1875
+ vcdlg(@_[0..1],3,0x8|$_[2],$_[3]);
1876
+}
1877
+
1878
+sub vcgd {
1879
+ confess(err("ARGNUM")) if ($#_!=4);
1880
+ VRRa(0xe7c2,@_);
1881
+}
1882
+sub vcgdb {
1883
+ vcgd(@_[0..1],3,@_[2..3]);
1884
+}
1885
+sub wcgdb {
1886
+ vcgd(@_[0..1],3,0x8|$_[2],$_[3]);
1887
+}
1888
+
1889
+sub vclgd {
1890
+ confess(err("ARGNUM")) if ($#_!=4);
1891
+ VRRa(0xe7c0,@_);
1892
+}
1893
+sub vclgdb {
1894
+ vclgd(@_[0..1],3,@_[2..3]);
1895
+}
1896
+sub wclgdb {
1897
+ vclgd(@_[0..1],3,0x8|$_[2],$_[3]);
1898
+}
1899
+
1900
+sub vfd {
1901
+ confess(err("ARGNUM")) if ($#_!=4);
1902
+ VRRc(0xe7e5,@_);
1903
+}
1904
+sub vfddb {
1905
+ vfd(@_,3,0);
1906
+}
1907
+sub wfddb {
1908
+ vfd(@_,3,8);
1909
+}
1910
+
1911
+sub vfi {
1912
+ confess(err("ARGNUM")) if ($#_!=4);
1913
+ VRRa(0xe7c7,@_);
1914
+}
1915
+sub vfidb {
1916
+ vfi(@_[0..1],3,@_[2..3]);
1917
+}
1918
+sub wfidb {
1919
+ vfi(@_[0..1],3,0x8|$_[2],$_[3]);
1920
+}
1921
+
1922
+sub vlde { # deprecated, use vfll
1923
+ confess(err("ARGNUM")) if ($#_!=3);
1924
+ VRRa(0xe7c4,@_);
1925
+}
1926
+sub vldeb { # deprecated, use vflls
1927
+ vlde(@_,2,0);
1928
+}
1929
+sub wldeb { # deprecated, use wflls
1930
+ vlde(@_,2,8);
1931
+}
1932
+
1933
+sub vled { # deprecated, use vflr
1934
+ confess(err("ARGNUM")) if ($#_!=4);
1935
+ VRRa(0xe7c5,@_);
1936
+}
1937
+sub vledb { # deprecated, use vflrd
1938
+ vled(@_[0..1],3,@_[2..3]);
1939
+}
1940
+sub wledb { # deprecated, use wflrd
1941
+ vled(@_[0..1],3,0x8|$_[2],$_[3]);
1942
+}
1943
+
1944
+sub vfm {
1945
+ confess(err("ARGNUM")) if ($#_!=4);
1946
+ VRRc(0xe7e7,@_);
1947
+}
1948
+sub vfmdb {
1949
+ vfm(@_,3,0);
1950
+}
1951
+sub wfmdb {
1952
+ vfm(@_,3,8);
1953
+}
1954
+
1955
+sub vfma {
1956
+ confess(err("ARGNUM")) if ($#_!=5);
1957
+ VRRe(0xe78f,@_);
1958
+}
1959
+sub vfmadb {
1960
+ vfma(@_,0,3);
1961
+}
1962
+sub wfmadb {
1963
+ vfma(@_,8,3);
1964
+}
1965
+
1966
+sub vfms {
1967
+ confess(err("ARGNUM")) if ($#_!=5);
1968
+ VRRe(0xe78e,@_);
1969
+}
1970
+sub vfmsdb {
1971
+ vfms(@_,0,3);
1972
+}
1973
+sub wfmsdb {
1974
+ vfms(@_,8,3);
1975
+}
1976
+
1977
+sub vfpso {
1978
+ confess(err("ARGNUM")) if ($#_!=4);
1979
+ VRRa(0xe7cc,@_);
1980
+}
1981
+sub vfpsodb {
1982
+ vfpso(@_[0..1],3,0,$_[2]);
1983
+}
1984
+sub wfpsodb {
1985
+ vfpso(@_[0..1],3,8,$_[2]);
1986
+}
1987
+sub vflcdb {
1988
+ vfpso(@_,3,0,0);
1989
+}
1990
+sub wflcdb {
1991
+ vfpso(@_,3,8,0);
1992
+}
1993
+sub vflndb {
1994
+ vfpso(@_,3,0,1);
1995
+}
1996
+sub wflndb {
1997
+ vfpso(@_,3,8,1);
1998
+}
1999
+sub vflpdb {
2000
+ vfpso(@_,3,0,2);
2001
+}
2002
+sub wflpdb {
2003
+ vfpso(@_,3,8,2);
2004
+}
2005
+
2006
+sub vfsq {
2007
+ confess(err("ARGNUM")) if ($#_!=3);
2008
+ VRRa(0xe7ce,@_);
2009
+}
2010
+sub vfsqdb {
2011
+ vfsq(@_,3,0);
2012
+}
2013
+sub wfsqdb {
2014
+ vfsq(@_,3,8);
2015
+}
2016
+
2017
+sub vfs {
2018
+ confess(err("ARGNUM")) if ($#_!=4);
2019
+ VRRc(0xe7e2,@_);
2020
+}
2021
+sub vfsdb {
2022
+ vfs(@_,3,0);
2023
+}
2024
+sub wfsdb {
2025
+ vfs(@_,3,8);
2026
+}
2027
+
2028
+sub vftci {
2029
+ confess(err("ARGNUM")) if ($#_!=4);
2030
+ VRIe(0xe74a,@_);
2031
+}
2032
+sub vftcidb {
2033
+ vftci(@_,3,0);
2034
+}
2035
+sub wftcidb {
2036
+ vftci(@_,3,8);
2037
+}
2038
+
2039
+# VXE - Support Instructions
2040
+
2041
+sub vbperm {
2042
+ confess(err("ARGNUM")) if ($#_!=2);
2043
+ VRRc(0xe785,@_);
2044
+}
2045
+
2046
+sub vllezlf {
2047
+ vllez(@_,6);
2048
+}
2049
+
2050
+# VXE - Integer Instructions
2051
+
2052
+sub vmsl {
2053
+ confess(err("ARGNUM")) if ($#_!=5);
2054
+ VRRd(0xe7b8,@_);
2055
+}
2056
+sub vmslg {
2057
+ vmsl(@_[0..3],3,$_[4]);
2058
+}
2059
+
2060
+sub vnx {
2061
+ confess(err("ARGNUM")) if ($#_!=2);
2062
+ VRRc(0xe76c,@_);
2063
+}
2064
+
2065
+sub vnn {
2066
+ confess(err("ARGNUM")) if ($#_!=2);
2067
+ VRRc(0xe76e,@_);
2068
+}
2069
+
2070
+sub voc {
2071
+ confess(err("ARGNUM")) if ($#_!=2);
2072
+ VRRc(0xe76f,@_);
2073
+}
2074
+
2075
+sub vpopctb {
2076
+ vpopct(@_,0);
2077
+}
2078
+sub vpopcth {
2079
+ vpopct(@_,1);
2080
+}
2081
+sub vpopctf {
2082
+ vpopct(@_,2);
2083
+}
2084
+sub vpopctg {
2085
+ vpopct(@_,3);
2086
+}
2087
+
2088
+# VXE - Floating-Point Instructions
2089
+
2090
+sub vfasb {
2091
+ vfa(@_,2,0);
2092
+}
2093
+sub wfasb {
2094
+ vfa(@_,2,8);
2095
+}
2096
+sub wfaxb {
2097
+ vfa(@_,4,8);
2098
+}
2099
+
2100
+sub wfcsb {
2101
+ wfc(@_,2,0);
2102
+}
2103
+sub wfcxb {
2104
+ wfc(@_,4,0);
2105
+}
2106
+
2107
+sub vfcesb {
2108
+ vfce(@_,2,0,0);
2109
+}
2110
+sub vfcesbs {
2111
+ vfce(@_,2,0,1);
2112
+}
2113
+sub wfcesb {
2114
+ vfce(@_,2,8,0);
2115
+}
2116
+sub wfcesbs {
2117
+ vfce(@_,2,8,1);
2118
+}
2119
+sub wfcexb {
2120
+ vfce(@_,4,8,0);
2121
+}
2122
+sub wfcexbs {
2123
+ vfce(@_,4,8,1);
2124
+}
2125
+
2126
+sub vfchsb {
2127
+ vfch(@_,2,0,0);
2128
+}
2129
+sub vfchsbs {
2130
+ vfch(@_,2,0,1);
2131
+}
2132
+sub wfchsb {
2133
+ vfch(@_,2,8,0);
2134
+}
2135
+sub wfchsbs {
2136
+ vfch(@_,2,8,1);
2137
+}
2138
+sub wfchxb {
2139
+ vfch(@_,4,8,0);
2140
+}
2141
+sub wfchxbs {
2142
+ vfch(@_,4,8,1);
2143
+}
2144
+
2145
+sub vfchesb {
2146
+ vfche(@_,2,0,0);
2147
+}
2148
+sub vfchesbs {
2149
+ vfche(@_,2,0,1);
2150
+}
2151
+sub wfchesb {
2152
+ vfche(@_,2,8,0);
2153
+}
2154
+sub wfchesbs {
2155
+ vfche(@_,2,8,1);
2156
+}
2157
+sub wfchexb {
2158
+ vfche(@_,4,8,0);
2159
+}
2160
+sub wfchexbs {
2161
+ vfche(@_,4,8,1);
2162
+}
2163
+
2164
+sub vfdsb {
2165
+ vfd(@_,2,0);
2166
+}
2167
+sub wfdsb {
2168
+ vfd(@_,2,8);
2169
+}
2170
+sub wfdxb {
2171
+ vfd(@_,4,8);
2172
+}
2173
+
2174
+sub vfisb {
2175
+ vfi(@_[0..1],2,@_[2..3]);
2176
+}
2177
+sub wfisb {
2178
+ vfi(@_[0..1],2,0x8|$_[2],$_[3]);
2179
+}
2180
+sub wfixb {
2181
+ vfi(@_[0..1],4,0x8|$_[2],$_[3]);
2182
+}
2183
+
2184
+sub vfll {
2185
+ vlde(@_);
2186
+}
2187
+sub vflls {
2188
+ vfll(@_,2,0);
2189
+}
2190
+sub wflls {
2191
+ vfll(@_,2,8);
2192
+}
2193
+sub wflld {
2194
+ vfll(@_,3,8);
2195
+}
2196
+
2197
+sub vflr {
2198
+ vled(@_);
2199
+}
2200
+sub vflrd {
2201
+ vflr(@_[0..1],3,@_[2..3]);
2202
+}
2203
+sub wflrd {
2204
+ vflr(@_[0..1],3,0x8|$_[2],$_[3]);
2205
+}
2206
+sub wflrx {
2207
+ vflr(@_[0..1],4,0x8|$_[2],$_[3]);
2208
+}
2209
+
2210
+sub vfmax {
2211
+ confess(err("ARGNUM")) if ($#_!=5);
2212
+ VRRc(0xe7ef,@_);
2213
+}
2214
+sub vfmaxsb {
2215
+ vfmax(@_[0..2],2,0,$_[3]);
2216
+}
2217
+sub vfmaxdb {
2218
+ vfmax(@_[0..2],3,0,$_[3]);
2219
+}
2220
+sub wfmaxsb {
2221
+ vfmax(@_[0..2],2,8,$_[3]);
2222
+}
2223
+sub wfmaxdb {
2224
+ vfmax(@_[0..2],3,8,$_[3]);
2225
+}
2226
+sub wfmaxxb {
2227
+ vfmax(@_[0..2],4,8,$_[3]);
2228
+}
2229
+
2230
+sub vfmin {
2231
+ confess(err("ARGNUM")) if ($#_!=5);
2232
+ VRRc(0xe7ee,@_);
2233
+}
2234
+sub vfminsb {
2235
+ vfmin(@_[0..2],2,0,$_[5]);
2236
+}
2237
+sub vfmindb {
2238
+ vfmin(@_[0..2],3,0,$_[5]);
2239
+}
2240
+sub wfminsb {
2241
+ vfmin(@_[0..2],2,8,$_[5]);
2242
+}
2243
+sub wfmindb {
2244
+ vfmin(@_[0..2],3,8,$_[5]);
2245
+}
2246
+sub wfminxb {
2247
+ vfmin(@_[0..2],4,8,$_[5]);
2248
+}
2249
+
2250
+sub vfmsb {
2251
+ vfm(@_,2,0);
2252
+}
2253
+sub wfmsb {
2254
+ vfm(@_,2,8);
2255
+}
2256
+sub wfmxb {
2257
+ vfm(@_,4,8);
2258
+}
2259
+
2260
+sub vfmasb {
2261
+ vfma(@_,0,2);
2262
+}
2263
+sub wfmasb {
2264
+ vfma(@_,8,2);
2265
+}
2266
+sub wfmaxb {
2267
+ vfma(@_,8,4);
2268
+}
2269
+
2270
+sub vfmssb {
2271
+ vfms(@_,0,2);
2272
+}
2273
+sub wfmssb {
2274
+ vfms(@_,8,2);
2275
+}
2276
+sub wfmsxb {
2277
+ vfms(@_,8,4);
2278
+}
2279
+
2280
+sub vfnma {
2281
+ confess(err("ARGNUM")) if ($#_!=5);
2282
+ VRRe(0xe79f,@_);
2283
+}
2284
+sub vfnmasb {
2285
+ vfnma(@_,0,2);
2286
+}
2287
+sub vfnmadb {
2288
+ vfnma(@_,0,3);
2289
+}
2290
+sub wfnmasb {
2291
+ vfnma(@_,8,2);
2292
+}
2293
+sub wfnmadb {
2294
+ vfnma(@_,8,3);
2295
+}
2296
+sub wfnmaxb {
2297
+ vfnma(@_,8,4);
2298
+}
2299
+
2300
+sub vfnms {
2301
+ confess(err("ARGNUM")) if ($#_!=5);
2302
+ VRRe(0xe79e,@_);
2303
+}
2304
+sub vfnmssb {
2305
+ vfnms(@_,0,2);
2306
+}
2307
+sub vfnmsdb {
2308
+ vfnms(@_,0,3);
2309
+}
2310
+sub wfnmssb {
2311
+ vfnms(@_,8,2);
2312
+}
2313
+sub wfnmsdb {
2314
+ vfnms(@_,8,3);
2315
+}
2316
+sub wfnmsxb {
2317
+ vfnms(@_,8,4);
2318
+}
2319
+
2320
+sub vfpsosb {
2321
+ vfpso(@_[0..1],2,0,$_[2]);
2322
+}
2323
+sub wfpsosb {
2324
+ vfpso(@_[0..1],2,8,$_[2]);
2325
+}
2326
+sub vflcsb {
2327
+ vfpso(@_,2,0,0);
2328
+}
2329
+sub wflcsb {
2330
+ vfpso(@_,2,8,0);
2331
+}
2332
+sub vflnsb {
2333
+ vfpso(@_,2,0,1);
2334
+}
2335
+sub wflnsb {
2336
+ vfpso(@_,2,8,1);
2337
+}
2338
+sub vflpsb {
2339
+ vfpso(@_,2,0,2);
2340
+}
2341
+sub wflpsb {
2342
+ vfpso(@_,2,8,2);
2343
+}
2344
+sub vfpsoxb {
2345
+ vfpso(@_[0..1],4,0,$_[2]);
2346
+}
2347
+sub wfpsoxb {
2348
+ vfpso(@_[0..1],4,8,$_[2]);
2349
+}
2350
+sub vflcxb {
2351
+ vfpso(@_,4,0,0);
2352
+}
2353
+sub wflcxb {
2354
+ vfpso(@_,4,8,0);
2355
+}
2356
+sub vflnxb {
2357
+ vfpso(@_,4,0,1);
2358
+}
2359
+sub wflnxb {
2360
+ vfpso(@_,4,8,1);
2361
+}
2362
+sub vflpxb {
2363
+ vfpso(@_,4,0,2);
2364
+}
2365
+sub wflpxb {
2366
+ vfpso(@_,4,8,2);
2367
+}
2368
+
2369
+sub vfsqsb {
2370
+ vfsq(@_,2,0);
2371
+}
2372
+sub wfsqsb {
2373
+ vfsq(@_,2,8);
2374
+}
2375
+sub wfsqxb {
2376
+ vfsq(@_,4,8);
2377
+}
2378
+
2379
+sub vfssb {
2380
+ vfs(@_,2,0);
2381
+}
2382
+sub wfssb {
2383
+ vfs(@_,2,8);
2384
+}
2385
+sub wfsxb {
2386
+ vfs(@_,4,8);
2387
+}
2388
+
2389
+sub vftcisb {
2390
+ vftci(@_,2,0);
2391
+}
2392
+sub wftcisb {
2393
+ vftci(@_,2,8);
2394
+}
2395
+sub wftcixb {
2396
+ vftci(@_,4,8);
2397
+}
2398
+
2399
+# VXD - Support Instructions
2400
+
2401
+sub vlrlr {
2402
+ confess(err("ARGNUM")) if ($#_!=2);
2403
+ VRSd(0xe637,@_);
2404
+}
2405
+
2406
+sub vlrl {
2407
+ confess(err("ARGNUM")) if ($#_!=2);
2408
+ VSI(0xe635,@_);
2409
+}
2410
+
2411
+sub vstrlr {
2412
+ confess(err("ARGNUM")) if ($#_!=2);
2413
+ VRSd(0xe63f,@_);
2414
+}
2415
+
2416
+sub vstrl {
2417
+ confess(err("ARGNUM")) if ($#_!=2);
2418
+ VSI(0xe63d,@_);
2419
+}
2420
+
2421
+sub vap {
2422
+ confess(err("ARGNUM")) if ($#_!=4);
2423
+ VRIf(0xe671,@_);
2424
+}
2425
+
2426
+sub vcp {
2427
+ confess(err("ARGNUM")) if ($#_!=2);
2428
+ VRRh(0xe677,@_);
2429
+}
2430
+
2431
+sub vcvb {
2432
+ confess(err("ARGNUM")) if ($#_!=2);
2433
+ VRRi(0xe650,@_);
2434
+}
2435
+
2436
+sub vcvbg {
2437
+ confess(err("ARGNUM")) if ($#_!=2);
2438
+ VRRi(0xe652,@_);
2439
+}
2440
+
2441
+sub vcvd {
2442
+ confess(err("ARGNUM")) if ($#_!=3);
2443
+ VRIi(0xe658,@_);
2444
+}
2445
+
2446
+sub vcvdg {
2447
+ confess(err("ARGNUM")) if ($#_!=3);
2448
+ VRIi(0xe65a,@_);
2449
+}
2450
+
2451
+sub vdp {
2452
+ confess(err("ARGNUM")) if ($#_!=4);
2453
+ VRIf(0xe67a,@_);
2454
+}
2455
+
2456
+sub vlip {
2457
+ confess(err("ARGNUM")) if ($#_!=2);
2458
+ VRIh(0xe649,@_);
2459
+}
2460
+
2461
+sub vmp {
2462
+ confess(err("ARGNUM")) if ($#_!=4);
2463
+ VRIf(0xe678,@_);
2464
+}
2465
+
2466
+sub vmsp {
2467
+ confess(err("ARGNUM")) if ($#_!=4);
2468
+ VRIf(0xe679,@_);
2469
+}
2470
+
2471
+sub vpkz {
2472
+ confess(err("ARGNUM")) if ($#_!=2);
2473
+ VSI(0xe634,@_);
2474
+}
2475
+
2476
+sub vpsop {
2477
+ confess(err("ARGNUM")) if ($#_!=4);
2478
+ VRIg(0xe65b,@_);
2479
+}
2480
+
2481
+sub vrp {
2482
+ confess(err("ARGNUM")) if ($#_!=4);
2483
+ VRIf(0xe67b,@_);
2484
+}
2485
+
2486
+sub vsdp {
2487
+ confess(err("ARGNUM")) if ($#_!=4);
2488
+ VRIf(0xe67e,@_);
2489
+}
2490
+
2491
+sub vsrp {
2492
+ confess(err("ARGNUM")) if ($#_!=4);
2493
+ VRIg(0xe659,@_);
2494
+}
2495
+
2496
+sub vsp {
2497
+ confess(err("ARGNUM")) if ($#_!=4);
2498
+ VRIf(0xe673,@_);
2499
+}
2500
+
2501
+sub vtp {
2502
+ confess(err("ARGNUM")) if ($#_!=0);
2503
+ VRRg(0xe65f,@_);
2504
+}
2505
+
2506
+sub vupkz {
2507
+ confess(err("ARGNUM")) if ($#_!=2);
2508
+ VSI(0xe63c,@_);
2509
+}
2510
+
2511
+#
2512
+# Instruction Formats
2513
+#
2514
+
2515
+sub RRE {
2516
+ confess(err("ARGNUM")) if ($#_<0||2<$#_);
2517
+ my $ops=join(',',@_[1..$#_]);
2518
+ my $memn=(caller(1))[3];
2519
+ $memn=~s/^.*:://;
2520
+ my ($opcode,$r1,$r2)=(shift,get_R(shift),get_R(shift));
2521
+
2522
+ $out.="\t.long\t".sprintf("%#010x",($opcode<<16|$r1<<4|$r2));
2523
+ $out.="\t# $memn\t$ops\n"
2524
+}
2525
+
2526
+sub RRFb {
2527
+ confess(err("ARGNUM")) if ($#_<3||4<$#_);
2528
+ my $ops=join(',',@_[1..$#_]);
2529
+ my $memn=(caller(1))[3];
2530
+ $memn=~s/^.*:://;
2531
+ my ($opcode,$r1,$r3,$r2,$m4)=(shift,get_R(shift),get_R(shift)
2532
+ ,get_R(shift),get_M(shift));
2533
+
2534
+ $out.="\t.long\t"
2535
+ .sprintf("%#010x",($opcode<<16|$r3<<12|$m4<<8|$r1<<4|$r2));
2536
+ $out.="\t# $memn\t$ops\n"
2537
+}
2538
+
2539
+sub S {
2540
+ confess(err("ARGNUM")) if ($#_<0||1<$#_);
2541
+ my $ops=join(',',@_[1..$#_]);
2542
+ my $memn=(caller(1))[3];
2543
+ $memn=~s/^.*:://;
2544
+ my ($opcode,$d2,$b2)=(shift,get_DB(shift));
2545
+
2546
+ $out.="\t.long\t".sprintf("%#010x",($opcode<<16|$b2<<12|$d2));
2547
+ $out.="\t# $memn\t$ops\n"
2548
+}
2549
+
2550
+sub VRIa {
2551
+ confess(err("ARGNUM")) if ($#_<2||3<$#_);
2552
+ my $ops=join(',',@_[1..$#_]);
2553
+ my $memn=(caller(1))[3];
2554
+ $memn=~s/^.*:://;
2555
+ my ($opcode,$v1,$i2,$m3)=(shift,get_V(shift),get_I(shift,16),
2556
+ get_M(shift));
2557
+
2558
+ $out.="\t.word\t";
2559
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
2560
+ $out.=sprintf("%#06x",$i2).",";
2561
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1)<<8|$opcode&0xff));
2562
+ $out.="\t# $memn\t$ops\n"
2563
+}
2564
+
2565
+sub VRIb {
2566
+ confess(err("ARGNUM")) if ($#_!=4);
2567
+ my $ops=join(',',@_[1..$#_]);
2568
+ my $memn=(caller(1))[3];
2569
+ $memn=~s/^.*:://;
2570
+ my ($opcode,$v1,$i2,$i3,$m4)=(shift,get_V(shift),get_I(shift,8),
2571
+ ,get_I(shift,8),get_M(shift));
2572
+
2573
+ $out.="\t.word\t";
2574
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
2575
+ $out.=sprintf("%#06x",($i2<<8|$i3)).",";
2576
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1)<<8|$opcode&0xff));
2577
+ $out.="\t# $memn\t$ops\n"
2578
+}
2579
+
2580
+sub VRIc {
2581
+ confess(err("ARGNUM")) if ($#_!=4);
2582
+ my $ops=join(',',@_[1..$#_]);
2583
+ my $memn=(caller(1))[3];
2584
+ $memn=~s/^.*:://;
2585
+ my ($opcode,$v1,$v3,$i2,$m4)=(shift,get_V(shift),get_V(shift),
2586
+ ,get_I(shift,16),get_M(shift));
2587
+
2588
+ $out.="\t.word\t";
2589
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v3&0xf)).",";
2590
+ $out.=sprintf("%#06x",$i2).",";
2591
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v3)<<8|$opcode&0xff));
2592
+ $out.="\t# $memn\t$ops\n"
2593
+}
2594
+
2595
+sub VRId {
2596
+ confess(err("ARGNUM")) if ($#_<4||$#_>5);
2597
+ my $ops=join(',',@_[1..$#_]);
2598
+ my $memn=(caller(1))[3];
2599
+ $memn=~s/^.*:://;
2600
+ my ($opcode,$v1,$v2,$v3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
2601
+ ,get_V(shift),get_I(shift,8),get_M(shift));
2602
+
2603
+ $out.="\t.word\t";
2604
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
2605
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$i4)).",";
2606
+ $out.=sprintf("%#06x",($m5<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
2607
+ $out.="\t# $memn\t$ops\n"
2608
+}
2609
+
2610
+sub VRIe {
2611
+ confess(err("ARGNUM")) if ($#_!=5);
2612
+ my $ops=join(',',@_[1..$#_]);
2613
+ my $memn=(caller(1))[3];
2614
+ $memn=~s/^.*:://;
2615
+ my ($opcode,$v1,$v2,$i3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
2616
+ ,get_I(shift,12),get_M(shift),get_M(shift));
2617
+
2618
+ $out.="\t.word\t";
2619
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
2620
+ $out.=sprintf("%#06x",($i3<<4|$m5)).",";
2621
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2)<<8|$opcode&0xff));
2622
+ $out.="\t# $memn\t$ops\n"
2623
+}
2624
+
2625
+sub VRIf {
2626
+ confess(err("ARGNUM")) if ($#_!=5);
2627
+ my $ops=join(',',@_[1..$#_]);
2628
+ my $memn=(caller(1))[3];
2629
+ $memn=~s/^.*:://;
2630
+ my ($opcode,$v1,$v2,$v3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
2631
+ ,get_V(shift),get_I(shift,8),get_M(shift));
2632
+
2633
+ $out.="\t.word\t";
2634
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
2635
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<4)|$i4>>4).",";
2636
+ $out.=sprintf("%#06x",(($i4&0xf)<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
2637
+ $out.="\t# $memn\t$ops\n"
2638
+}
2639
+
2640
+sub VRIg {
2641
+ confess(err("ARGNUM")) if ($#_!=5);
2642
+ my $ops=join(',',@_[1..$#_]);
2643
+ my $memn=(caller(1))[3];
2644
+ $memn=~s/^.*:://;
2645
+ my ($opcode,$v1,$v2,$i3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
2646
+ ,get_I(shift,8),get_I(shift,8),get_M(shift));
2647
+
2648
+ $out.="\t.word\t";
2649
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
2650
+ $out.=sprintf("%#06x",($i4<<8|$m5<<4|$i3>>4)).",";
2651
+ $out.=sprintf("%#06x",(($i3&0xf)<<12|RXB($v1,$v2)<<8|$opcode&0xff));
2652
+ $out.="\t# $memn\t$ops\n"
2653
+}
2654
+
2655
+sub VRIh {
2656
+ confess(err("ARGNUM")) if ($#_!=3);
2657
+ my $ops=join(',',@_[1..$#_]);
2658
+ my $memn=(caller(1))[3];
2659
+ $memn=~s/^.*:://;
2660
+ my ($opcode,$v1,$i2,$i3)=(shift,get_V(shift),get_I(shift,16),
2661
+ get_I(shift,4));
2662
+
2663
+ $out.="\t.word\t";
2664
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
2665
+ $out.=sprintf("%#06x",$i2).",";
2666
+ $out.=sprintf("%#06x",($i3<<12|RXB($v1)<<8|$opcode&0xff));
2667
+ $out.="\t# $memn\t$ops\n"
2668
+}
2669
+
2670
+sub VRIi {
2671
+ confess(err("ARGNUM")) if ($#_!=4);
2672
+ my $ops=join(',',@_[1..$#_]);
2673
+ my $memn=(caller(1))[3];
2674
+ $memn=~s/^.*:://;
2675
+ my ($opcode,$v1,$r2,$i3,$m4)=(shift,get_V(shift),get_R(shift),
2676
+ ,get_I(shift,8),get_M(shift));
2677
+
2678
+ $out.="\t.word\t";
2679
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|$r2).",";
2680
+ $out.=sprintf("%#06x",($m4<<4|$i3>>4)).",";
2681
+ $out.=sprintf("%#06x",(($i3&0xf)<<12|RXB($v1)<<8|$opcode&0xff));
2682
+ $out.="\t# $memn\t$ops\n"
2683
+}
2684
+
2685
+sub VRRa {
2686
+ confess(err("ARGNUM")) if ($#_<2||5<$#_);
2687
+ my $ops=join(',',@_[1..$#_]);
2688
+ my $memn=(caller(1))[3];
2689
+ $memn=~s/^.*:://;
2690
+ my ($opcode,$v1,$v2,$m3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
2691
+ get_M(shift),get_M(shift),get_M(shift));
2692
+
2693
+ $out.="\t.word\t";
2694
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2695
+ $out.=sprintf("%#06x",($m5<<4|$m4)).",";
2696
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1,$v2)<<8|$opcode&0xff));
2697
+ $out.="\t# $memn\t$ops\n"
2698
+}
2699
+
2700
+sub VRRb {
2701
+ confess(err("ARGNUM")) if ($#_<3||5<$#_);
2702
+ my $ops=join(',',@_[1..$#_]);
2703
+ my $memn=(caller(1))[3];
2704
+ $memn=~s/^.*:://;
2705
+ my ($opcode,$v1,$v2,$v3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
2706
+ get_V(shift),get_M(shift),get_M(shift));
2707
+
2708
+ $out.="\t.word\t";
2709
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2710
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<4)).",";
2711
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
2712
+ $out.="\t# $memn\t$ops\n"
2713
+}
2714
+
2715
+sub VRRc {
2716
+ confess(err("ARGNUM")) if ($#_<3||6<$#_);
2717
+ my $ops=join(',',@_[1..$#_]);
2718
+ my $memn=(caller(1))[3];
2719
+ $memn=~s/^.*:://;
2720
+ my ($opcode,$v1,$v2,$v3,$m4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
2721
+ get_V(shift),get_M(shift),get_M(shift),get_M(shift));
2722
+
2723
+ $out.="\t.word\t";
2724
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2725
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m6<<4|$m5)).",";
2726
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
2727
+ $out.="\t# $memn\t$ops\n"
2728
+}
2729
+
2730
+sub VRRd {
2731
+ confess(err("ARGNUM")) if ($#_<4||6<$#_);
2732
+ my $ops=join(',',@_[1..$#_]);
2733
+ my $memn=(caller(1))[3];
2734
+ $memn=~s/^.*:://;
2735
+ my ($opcode,$v1,$v2,$v3,$v4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
2736
+ get_V(shift),get_V(shift),get_M(shift),get_M(shift));
2737
+
2738
+ $out.="\t.word\t";
2739
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2740
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<8|$m6<<4)).",";
2741
+ $out.=sprintf("%#06x",(($v4&0xf)<<12|RXB($v1,$v2,$v3,$v4)<<8|$opcode&0xff));
2742
+ $out.="\t# $memn\t$ops\n"
2743
+}
2744
+
2745
+sub VRRe {
2746
+ confess(err("ARGNUM")) if ($#_<4||6<$#_);
2747
+ my $ops=join(',',@_[1..$#_]);
2748
+ my $memn=(caller(1))[3];
2749
+ $memn=~s/^.*:://;
2750
+ my ($opcode,$v1,$v2,$v3,$v4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
2751
+ get_V(shift),get_V(shift),get_M(shift),get_M(shift));
2752
+
2753
+ $out.="\t.word\t";
2754
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2755
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m6<<8|$m5)).",";
2756
+ $out.=sprintf("%#06x",(($v4&0xf)<<12|RXB($v1,$v2,$v3,$v4)<<8|$opcode&0xff));
2757
+ $out.="\t# $memn\t$ops\n"
2758
+}
2759
+
2760
+sub VRRf {
2761
+ confess(err("ARGNUM")) if ($#_!=3);
2762
+ my $ops=join(',',@_[1..$#_]);
2763
+ my $memn=(caller(1))[3];
2764
+ $memn=~s/^.*:://;
2765
+ my ($opcode,$v1,$r2,$r3)=(shift,get_V(shift),get_R(shift),
2766
+ get_R(shift));
2767
+
2768
+ $out.="\t.word\t";
2769
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|$r2)).",";
2770
+ $out.=sprintf("%#06x",($r3<<12)).",";
2771
+ $out.=sprintf("%#06x",(RXB($v1)<<8|$opcode&0xff));
2772
+ $out.="\t# $memn\t$ops\n"
2773
+}
2774
+
2775
+sub VRRg {
2776
+ confess(err("ARGNUM")) if ($#_!=1);
2777
+ my $ops=join(',',@_[1..$#_]);
2778
+ my $memn=(caller(1))[3];
2779
+ $memn=~s/^.*:://;
2780
+ my ($opcode,$v1)=(shift,get_V(shift));
2781
+
2782
+ $out.="\t.word\t";
2783
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf))).",";
2784
+ $out.=sprintf("%#06x",0x0000).",";
2785
+ $out.=sprintf("%#06x",(RXB(0,$v1)<<8|$opcode&0xff));
2786
+ $out.="\t# $memn\t$ops\n"
2787
+}
2788
+
2789
+sub VRRh {
2790
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
2791
+ my $ops=join(',',@_[1..$#_]);
2792
+ my $memn=(caller(1))[3];
2793
+ $memn=~s/^.*:://;
2794
+ my ($opcode,$v1,$v2,$m3)=(shift,get_V(shift),get_V(shift),
2795
+ get_M(shift));
2796
+
2797
+ $out.="\t.word\t";
2798
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf))).",";
2799
+ $out.=sprintf("%#06x",(($v2&0xf)<<12|$m3<<4)).",";
2800
+ $out.=sprintf("%#06x",(RXB(0,$v1,$v2)<<8|$opcode&0xff));
2801
+ $out.="\t# $memn\t$ops\n"
2802
+}
2803
+
2804
+sub VRRi {
2805
+ confess(err("ARGNUM")) if ($#_!=3);
2806
+ my $ops=join(',',@_[1..$#_]);
2807
+ my $memn=(caller(1))[3];
2808
+ $memn=~s/^.*:://;
2809
+ my ($opcode,$r1,$v2,$m3)=(shift,get_R(shift),get_V(shift),
2810
+ get_M(shift));
2811
+
2812
+ $out.="\t.word\t";
2813
+ $out.=sprintf("%#06x",($opcode&0xff00|$r1<<4|($v2&0xf))).",";
2814
+ $out.=sprintf("%#06x",($m3<<4))."\,";
2815
+ $out.=sprintf("%#06x",(RXB(0,$v2)<<8|$opcode&0xff));
2816
+ $out.="\t# $memn\t$ops\n"
2817
+}
2818
+
2819
+sub VRSa {
2820
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
2821
+ my $ops=join(',',@_[1..$#_]);
2822
+ my $memn=(caller(1))[3];
2823
+ $memn=~s/^.*:://;
2824
+ my ($opcode,$v1,$v3,$d2,$b2,$m4)=(shift,get_V(shift),get_V(shift),
2825
+ get_DB(shift),get_M(shift));
2826
+
2827
+ $out.="\t.word\t";
2828
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v3&0xf))).",";
2829
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2830
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v3)<<8|$opcode&0xff));
2831
+ $out.="\t# $memn\t$ops\n"
2832
+}
2833
+
2834
+sub VRSb {
2835
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
2836
+ my $ops=join(',',@_[1..$#_]);
2837
+ my $memn=(caller(1))[3];
2838
+ $memn=~s/^.*:://;
2839
+ my ($opcode,$v1,$r3,$d2,$b2,$m4)=(shift,get_V(shift),get_R(shift),
2840
+ get_DB(shift),get_M(shift));
2841
+
2842
+ $out.="\t.word\t";
2843
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|$r3)).",";
2844
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2845
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1)<<8|$opcode&0xff));
2846
+ $out.="\t# $memn\t$ops\n"
2847
+}
2848
+
2849
+sub VRSc {
2850
+ confess(err("ARGNUM")) if ($#_!=4);
2851
+ my $ops=join(',',@_[1..$#_]);
2852
+ my $memn=(caller(1))[3];
2853
+ $memn=~s/^.*:://;
2854
+ my ($opcode,$r1,$v3,$d2,$b2,$m4)=(shift,get_R(shift),get_V(shift),
2855
+ get_DB(shift),get_M(shift));
2856
+
2857
+ $out.="\t.word\t";
2858
+ $out.=sprintf("%#06x",($opcode&0xff00|$r1<<4|($v3&0xf))).",";
2859
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2860
+ $out.=sprintf("%#06x",($m4<<12|RXB(0,$v3)<<8|$opcode&0xff));
2861
+ $out.="\t# $memn\t$ops\n"
2862
+}
2863
+
2864
+sub VRSd {
2865
+ confess(err("ARGNUM")) if ($#_!=3);
2866
+ my $ops=join(',',@_[1..$#_]);
2867
+ my $memn=(caller(1))[3];
2868
+ $memn=~s/^.*:://;
2869
+ my ($opcode,$v1,$r3,$d2,$b2)=(shift,get_V(shift),get_R(shift),
2870
+ get_DB(shift));
2871
+
2872
+ $out.="\t.word\t";
2873
+ $out.=sprintf("%#06x",($opcode&0xff00|$r3)).",";
2874
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2875
+ $out.=sprintf("%#06x",(($v1&0xf)<<12|RXB(0,0,0,$v1)<<8|$opcode&0xff));
2876
+ $out.="\t# $memn\t$ops\n"
2877
+}
2878
+
2879
+sub VRV {
2880
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
2881
+ my $ops=join(',',@_[1..$#_]);
2882
+ my $memn=(caller(1))[3];
2883
+ $memn=~s/^.*:://;
2884
+ my ($opcode,$v1,$d2,$v2,$b2,$m3)=(shift,get_V(shift),get_DVB(shift),
2885
+ get_M(shift));
2886
+
2887
+ $out.="\t.word\t";
2888
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
2889
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2890
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1,$v2)<<8|$opcode&0xff));
2891
+ $out.="\t# $memn\t$ops\n"
2892
+}
2893
+
2894
+sub VRX {
2895
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
2896
+ my $ops=join(',',@_[1..$#_]);
2897
+ my $memn=(caller(1))[3];
2898
+ $memn=~s/^.*:://;
2899
+ my ($opcode,$v1,$d2,$x2,$b2,$m3)=(shift,get_V(shift),get_DXB(shift),
2900
+ get_M(shift));
2901
+
2902
+ $out.="\t.word\t";
2903
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($x2))).",";
2904
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2905
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1)<<8|$opcode&0xff));
2906
+ $out.="\t# $memn\t$ops\n"
2907
+}
2908
+
2909
+sub VSI {
2910
+ confess(err("ARGNUM")) if ($#_!=3);
2911
+ my $ops=join(',',@_[1..$#_]);
2912
+ my $memn=(caller(1))[3];
2913
+ $memn=~s/^.*:://;
2914
+ my ($opcode,$v1,$d2,$b2,$i3)=(shift,get_V(shift),get_DB(shift),
2915
+ get_I(shift,8));
2916
+
2917
+ $out.="\t.word\t";
2918
+ $out.=sprintf("%#06x",($opcode&0xff00|$i3)).",";
2919
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
2920
+ $out.=sprintf("%#06x",(($v1&0xf)<<12|RXB(0,0,0,$v1)<<8|$opcode&0xff));
2921
+ $out.="\t# $memn\t$ops\n"
2922
+}
2923
+
2924
+#
2925
+# Internal
2926
+#
2927
+
2928
+sub get_R {
2929
+ confess(err("ARGNUM")) if ($#_!=0);
2930
+ my $r;
2931
+
2932
+ for (shift) {
2933
+ if (!defined) {
2934
+ $r=0;
2935
+ } elsif (/^$GR$/) {
2936
+ $r=$1;
2937
+ } else {
2938
+ confess(err("PARSE"));
2939
+ }
2940
+ }
2941
+ confess(err("ARGRANGE")) if ($r&~0xf);
2942
+
2943
+ return $r;
2944
+}
2945
+
2946
+sub get_V {
2947
+ confess(err("ARGNUM")) if ($#_!=0);
2948
+ my $v;
2949
+
2950
+ for (shift) {
2951
+ if (!defined) {
2952
+ $v=0;
2953
+ } elsif (/^$VR$/) {
2954
+ $v=$1;
2955
+ } else {
2956
+ confess(err("PARSE"));
2957
+ }
2958
+ }
2959
+ confess(err("ARGRANGE")) if ($v&~0x1f);
2960
+
2961
+ return $v;
2962
+}
2963
+
2964
+sub get_I {
2965
+ confess(err("ARGNUM")) if ($#_!=1);
2966
+ my ($i,$bits)=(shift,shift);
2967
+
2968
+ $i=defined($i)?(eval($i)):(0);
2969
+ confess(err("PARSE")) if (!defined($i));
2970
+ confess(err("ARGRANGE")) if (abs($i)&~(2**$bits-1));
2971
+
2972
+ return $i&(2**$bits-1);
2973
+}
2974
+
2975
+sub get_M {
2976
+ confess(err("ARGNUM")) if ($#_!=0);
2977
+ my $m=shift;
2978
+
2979
+ $m=defined($m)?(eval($m)):(0);
2980
+ confess(err("PARSE")) if (!defined($m));
2981
+ confess(err("ARGRANGE")) if ($m&~0xf);
2982
+
2983
+ return $m;
2984
+}
2985
+
2986
+sub get_DB
2987
+{
2988
+ confess(err("ARGNUM")) if ($#_!=0);
2989
+ my ($d,$b);
2990
+
2991
+ for (shift) {
2992
+ if (!defined) {
2993
+ ($d,$b)=(0,0);
2994
+ } elsif (/^(.+)\($GR\)$/) {
2995
+ ($d,$b)=(eval($1),$2);
2996
+ confess(err("PARSE")) if (!defined($d));
2997
+ } elsif (/^(.+)$/) {
2998
+ ($d,$b)=(eval($1),0);
2999
+ confess(err("PARSE")) if (!defined($d));
3000
+ } else {
3001
+ confess(err("PARSE"));
3002
+ }
3003
+ }
3004
+ confess(err("ARGRANGE")) if ($d&~0xfff||$b&~0xf);
3005
+
3006
+ return ($d,$b);
3007
+}
3008
+
3009
+sub get_DVB
3010
+{
3011
+ confess(err("ARGNUM")) if ($#_!=0);
3012
+ my ($d,$v,$b);
3013
+
3014
+ for (shift) {
3015
+ if (!defined) {
3016
+ ($d,$v,$b)=(0,0,0);
3017
+ } elsif (/^(.+)\($VR,$GR\)$/) {
3018
+ ($d,$v,$b)=(eval($1),$2,$3);
3019
+ confess(err("PARSE")) if (!defined($d));
3020
+ } elsif (/^(.+)\($GR\)$/) {
3021
+ ($d,$v,$b)=(eval($1),0,$2);
3022
+ confess(err("PARSE")) if (!defined($d));
3023
+ } elsif (/^(.+)$/) {
3024
+ ($d,$v,$b)=(eval($1),0,0);
3025
+ confess(err("PARSE")) if (!defined($d));
3026
+ } else {
3027
+ confess(err("PARSE"));
3028
+ }
3029
+ }
3030
+ confess(err("ARGRANGE")) if ($d&~0xfff||$v&~0x1f||$b&~0xf);
3031
+
3032
+ return ($d,$v,$b);
3033
+}
3034
+
3035
+sub get_DXB
3036
+{
3037
+ confess(err("ARGNUM")) if ($#_!=0);
3038
+ my ($d,$x,$b);
3039
+
3040
+ for (shift) {
3041
+ if (!defined) {
3042
+ ($d,$x,$b)=(0,0,0);
3043
+ } elsif (/^(.+)\($GR,$GR\)$/) {
3044
+ ($d,$x,$b)=(eval($1),$2,$3);
3045
+ confess(err("PARSE")) if (!defined($d));
3046
+ } elsif (/^(.+)\($GR\)$/) {
3047
+ ($d,$x,$b)=(eval($1),0,$2);
3048
+ confess(err("PARSE")) if (!defined($d));
3049
+ } elsif (/^(.+)$/) {
3050
+ ($d,$x,$b)=(eval($1),0,0);
3051
+ confess(err("PARSE")) if (!defined($d));
3052
+ } else {
3053
+ confess(err("PARSE"));
3054
+ }
3055
+ }
3056
+ confess(err("ARGRANGE")) if ($d&~0xfff||$x&~0xf||$b&~0xf);
3057
+
3058
+ return ($d,$x,$b);
3059
+}
3060
+
3061
+sub RXB
3062
+{
3063
+ confess(err("ARGNUM")) if ($#_<0||3<$#_);
3064
+ my $rxb=0;
3065
+
3066
+ $rxb|=0x08 if (defined($_[0])&&($_[0]&0x10));
3067
+ $rxb|=0x04 if (defined($_[1])&&($_[1]&0x10));
3068
+ $rxb|=0x02 if (defined($_[2])&&($_[2]&0x10));
3069
+ $rxb|=0x01 if (defined($_[3])&&($_[3]&0x10));
3070
+
3071
+ return $rxb;
3072
+}
3073
+
3074
+sub err {
3075
+ my %ERR =
3076
+ (
3077
+ ARGNUM => 'Wrong number of arguments',
3078
+ ARGRANGE=> 'Argument out of range',
3079
+ PARSE => 'Parse error',
3080
+ );
3081
+ confess($ERR{ARGNUM}) if ($#_!=0);
3082
+
3083
+ return $ERR{$_[0]};
3084
+}
3085
+
3086
+1;
3087
--
3088
2.21.0
3089
3090