forked from pool/openssl-1_1
949eaaafb4
- Use upstream patch for the locale crash (bsc#1135550) - delete openssl-fix_underflow_in_errstr_handling.patch - add 0001-build_SYS_str_reasons-Fix-a-crash-caused-by-overlong.patch - Add s390x vectorized support for ChaCha20 and Poly1305 (jsc#SLE-6126, jsc#SLE-6129) * 0001-s390x-assembly-pack-perlasm-support.patch * 0002-crypto-chacha-asm-chacha-s390x.pl-add-vx-code-path.patch * 0003-crypto-poly1305-asm-poly1305-s390x.pl-add-vx-code-pa.patch * 0004-s390x-assembly-pack-fix-formal-interface-bug-in-chac.patch * 0005-s390x-assembly-pack-import-chacha-from-cryptogams-re.patch * 0006-s390x-assembly-pack-import-poly-from-cryptogams-repo.patch - Update to 1.1.1c (bsc#1133925, jsc#SLE-6430) - drop upstreamed patches: - update keyring by including Richard Levitte's key OBS-URL: https://build.opensuse.org/request/show/708112 OBS-URL: https://build.opensuse.org/package/show/security:tls/openssl-1_1?expand=0&rev=38
3090 lines
52 KiB
Diff
3090 lines
52 KiB
Diff
From c66bb88cb08adbc848271dd388aa9695c7e200be Mon Sep 17 00:00:00 2001
|
|
From: Patrick Steuer <patrick.steuer@de.ibm.com>
|
|
Date: Wed, 7 Dec 2016 12:58:34 +0100
|
|
Subject: [PATCH] s390x assembly pack: perlasm support.
|
|
|
|
Added crypto/perlasm/s390x.pm Perl module. Its primary use is to be
|
|
independent of binutils version, that is to write byte codes of
|
|
instructions that are not part of the base instruction set.
|
|
Currently only gas format is supported.
|
|
|
|
Signed-off-by: Patrick Steuer <patrick.steuer@de.ibm.com>
|
|
|
|
Reviewed-by: Tim Hudson <tjh@openssl.org>
|
|
Reviewed-by: Richard Levitte <levitte@openssl.org>
|
|
(Merged from https://github.com/openssl/openssl/pull/6919)
|
|
---
|
|
crypto/perlasm/s390x.pm | 3060 +++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 3060 insertions(+)
|
|
create mode 100644 crypto/perlasm/s390x.pm
|
|
|
|
diff --git a/crypto/perlasm/s390x.pm b/crypto/perlasm/s390x.pm
|
|
new file mode 100644
|
|
index 0000000000..5f3a49dd0c
|
|
--- /dev/null
|
|
+++ b/crypto/perlasm/s390x.pm
|
|
@@ -0,0 +1,3060 @@
|
|
+#!/usr/bin/env perl
|
|
+# Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
|
+#
|
|
+# Licensed under the OpenSSL license (the "License"). You may not use
|
|
+# this file except in compliance with the License. You can obtain a copy
|
|
+# in the file LICENSE in the source distribution or at
|
|
+# https://www.openssl.org/source/license.html
|
|
+
|
|
+# Copyright IBM Corp. 2018
|
|
+# Author: Patrick Steuer <patrick.steuer@de.ibm.com>
|
|
+
|
|
+package perlasm::s390x;
|
|
+
|
|
+use strict;
|
|
+use warnings;
|
|
+use Carp qw(confess);
|
|
+use Exporter qw(import);
|
|
+
|
|
+our @EXPORT=qw(PERLASM_BEGIN PERLASM_END);
|
|
+our @EXPORT_OK=qw(AUTOLOAD LABEL INCLUDE stfle);
|
|
+our %EXPORT_TAGS=(
|
|
+ MSA => [qw(kmac km kmc kimd klmd)],
|
|
+ MSA4 => [qw(kmf kmo pcc kmctr)],
|
|
+ MSA5 => [qw(ppno prno)],
|
|
+ MSA8 => [qw(kma)],
|
|
+ VX => [qw(vgef vgeg vgbm vzero vone vgm vgmb vgmh vgmf vgmg
|
|
+ vl vlr vlrep vlrepb vlreph vlrepf vlrepg vleb vleh vlef vleg vleib
|
|
+ vleih vleif vleig vlgv vlgvb vlgvh vlgvf vlgvg vllez vllezb vllezh
|
|
+ vllezf vllezg vlm vlbb vlvg vlvgb vlvgh vlvgf vlvgg vlvgp
|
|
+ vll vmrh vmrhb vmrhh vmrhf vmrhg vmrl vmrlb vmrlh vmrlf vmrlg vpk
|
|
+ vpkh vpkf vpkg vpks vpksh vpksf vpksg vpkshs vpksfs vpksgs vpkls
|
|
+ vpklsh vpklsf vpklsg vpklshs vpklsfs vpklsgs vperm vpdi vrep vrepb
|
|
+ vreph vrepf vrepg vrepi vrepib vrepih vrepif vrepig vscef vsceg
|
|
+ vsel vseg vsegb vsegh vsegf vst vsteb vsteh vstef vsteg vstm vstl
|
|
+ vuph vuphb vuphh vuphf vuplh vuplhb vuplhh vuplhf vupl vuplb vuplhw
|
|
+ vuplf vupll vupllb vupllh vupllf va vab vah vaf vag vaq vacc vaccb
|
|
+ vacch vaccf vaccg vaccq vac vacq vaccc vacccq vn vnc vavg vavgb
|
|
+ vavgh vavgf vavgg vavgl vavglb vavglh vavglf vavglg vcksm vec_ vecb
|
|
+ vech vecf vecg vecl veclb veclh veclf veclg vceq vceqb vceqh vceqf
|
|
+ vceqg vceqbs vceqhs vceqfs vceqgs vch vchb vchh vchf vchg vchbs
|
|
+ vchhs vchfs vchgs vchl vchlb vchlh vchlf vchlg vchlbs vchlhs vchlfs
|
|
+ vchlgs vclz vclzb vclzh vclzf vclzg vctz vctzb vctzh vctzf vctzg
|
|
+ vx vgfm vgfmb vgfmh vgfmf vgfmg vgfma vgfmab vgfmah vgfmaf vgfmag
|
|
+ vlc vlcb vlch vlcf vlcg vlp vlpb vlph vlpf vlpg vmx vmxb vmxh vmxf
|
|
+ vmxg vmxl vmxlb vmxlh vmxlf vmxlg vmn vmnb vmnh vmnf vmng vmnl
|
|
+ vmnlb vmnlh vmnlf vmnlg vmal vmalb vmalhw vmalf vmah vmahb vmahh
|
|
+ vmahf vmalh vmalhb vmalhh vmalhf vmae vmaeb vmaeh vmaef vmale
|
|
+ vmaleb vmaleh vmalef vmao vmaob vmaoh vmaof vmalo vmalob vmaloh
|
|
+ vmalof vmh vmhb vmhh vmhf vmlh vmlhb vmlhh vmlhf vml vmlb vmlhw
|
|
+ vmlf vme vmeb vmeh vmef vmle vmleb vmleh vmlef vmo vmob vmoh vmof
|
|
+ vmlo vmlob vmloh vmlof vno vnot vo vpopct verllv verllvb verllvh
|
|
+ verllvf verllvg verll verllb verllh verllf verllg verim verimb
|
|
+ verimh verimf verimg veslv veslvb veslvh veslvf veslvg vesl veslb
|
|
+ veslh veslf veslg vesrav vesravb vesravh vesravf vesravg vesra
|
|
+ vesrab vesrah vesraf vesrag vesrlv vesrlvb vesrlvh vesrlvf vesrlvg
|
|
+ vesrl vesrlb vesrlh vesrlf vesrlg vsl vslb vsldb vsra vsrab vsrl
|
|
+ vsrlb vs vsb vsh vsf vsg vsq vscbi vscbib vscbih vscbif vscbig
|
|
+ vscbiq vsbi vsbiq vsbcbi vsbcbiq vsumg vsumgh vsumgf vsumq vsumqf
|
|
+ vsumqg vsum vsumb vsumh vtm vfae vfaeb vfaeh vfaef vfaebs vfaehs
|
|
+ vfaefs vfaezb vfaezh vfaezf vfaezbs vfaezhs vfaezfs vfee vfeeb
|
|
+ vfeeh vfeef vfeebs vfeehs vfeefs vfeezb vfeezh vfeezf vfeezbs
|
|
+ vfeezhs vfeezfs vfene vfeneb vfeneh vfenef vfenebs vfenehs vfenefs
|
|
+ vfenezb vfenezh vfenezf vfenezbs vfenezhs vfenezfs vistr vistrb
|
|
+ vistrh vistrf vistrbs vistrhs vistrfs vstrc vstrcb vstrch vstrcf
|
|
+ vstrcbs vstrchs vstrcfs vstrczb vstrczh vstrczf vstrczbs vstrczhs
|
|
+ vstrczfs vfa vfadb wfadb wfc wfcdb wfk wfkdb vfce vfcedb wfcedb
|
|
+ vfcedbs wfcedbs vfch vfchdb wfchdb vfchdbs wfchdbs vfche vfchedb
|
|
+ wfchedb vfchedbs wfchedbs vcdg vcdgb wcdgb vcdlg vcdlgb wcdlgb vcgd
|
|
+ vcgdb wcgdb vclgd vclgdb wclgdb vfd vfddb wfddb vfi vfidb wfidb
|
|
+ vlde vldeb wldeb vled vledb wledb vfm vfmdb wfmdb vfma vfmadb
|
|
+ wfmadb vfms vfmsdb wfmsdb vfpso vfpsodb wfpsodb vflcdb wflcdb
|
|
+ vflndb wflndb vflpdb wflpdb vfsq vfsqdb wfsqdb vfs vfsdb wfsdb
|
|
+ vftci vftcidb wftcidb)],
|
|
+ VXE => [qw(vbperm vllezlf vmsl vmslg vnx vnn voc vpopctb vpopcth
|
|
+ vpopctf vpopctg vfasb wfasb wfaxb wfcsb wfcxb wfksb wfkxb vfcesb
|
|
+ vfcesbs wfcesb wfcesbs wfcexb wfcexbs vfchsb vfchsbs wfchsb wfchsbs
|
|
+ wfchxb wfchxbs vfchesb vfchesbs wfchesb wfchesbs wfchexb wfchexbs
|
|
+ vfdsb wfdsb wfdxb vfisb wfisb wfixb vfll vflls wflls wflld vflr
|
|
+ vflrd wflrd wflrx vfmax vfmaxsb vfmaxdb wfmaxsb wfmaxdb wfmaxxb
|
|
+ vfmin vfminsb vfmindb wfminsb wfmindb wfminxb vfmsb wfmsb wfmxb
|
|
+ vfnma vfnms vfmasb wfmasb wfmaxb vfmssb wfmssb wfmsxb vfnmasb
|
|
+ vfnmadb wfnmasb wfnmadb wfnmaxb vfnmssb vfnmsdb wfnmssb wfnmsdb
|
|
+ wfnmsxb vfpsosb wfpsosb vflcsb wflcsb vflnsb wflnsb vflpsb wflpsb
|
|
+ vfpsoxb wfpsoxb vflcxb wflcxb vflnxb wflnxb vflpxb wflpxb vfsqsb
|
|
+ wfsqsb wfsqxb vfssb wfssb wfsxb vftcisb wftcisb wftcixb)],
|
|
+ VXD => [qw(vlrlr vlrl vstrlr vstrl vap vcp vcvb vcvbg vcvd vcvdg vdp
|
|
+ vlip vmp vmsp vpkz vpsop vrp vsdp vsrp vsp vtp vupkz)],
|
|
+);
|
|
+Exporter::export_ok_tags(qw(MSA MSA4 MSA5 MSA8 VX VXE VXD));
|
|
+
|
|
+our $AUTOLOAD;
|
|
+
|
|
+my $GR='(?:%r)?([0-9]|1[0-5])';
|
|
+my $VR='(?:%v)?([0-9]|1[0-9]|2[0-9]|3[0-1])';
|
|
+
|
|
+my ($file,$out);
|
|
+
|
|
+sub PERLASM_BEGIN
|
|
+{
|
|
+ ($file,$out)=(shift,"");
|
|
+}
|
|
+sub PERLASM_END
|
|
+{
|
|
+ if (defined($file)) {
|
|
+ open(my $fd,'>',$file)||die("can't open $file: $!");
|
|
+ print({$fd}$out);
|
|
+ close($fd);
|
|
+ } else {
|
|
+ print($out);
|
|
+ }
|
|
+}
|
|
+
|
|
+sub AUTOLOAD {
|
|
+ confess(err("PARSE")) if (grep(!defined($_),@_));
|
|
+ my $token;
|
|
+ for ($AUTOLOAD) {
|
|
+ $token=".$1" if (/^.*::([A-Z_]+)$/); # uppercase: directive
|
|
+ $token="\t$1" if (/^.*::([a-z]+)$/); # lowercase: mnemonic
|
|
+ confess(err("PARSE")) if (!defined($token));
|
|
+ }
|
|
+ $token.="\t" if ($#_>=0);
|
|
+ $out.=$token.join(',',@_)."\n";
|
|
+}
|
|
+
|
|
+sub LABEL { # label directive
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my ($label)=@_;
|
|
+ $out.="$label:\n";
|
|
+}
|
|
+
|
|
+sub INCLUDE {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my ($file)=@_;
|
|
+ $out.="#include \"$file\"\n";
|
|
+}
|
|
+
|
|
+#
|
|
+# Mnemonics
|
|
+#
|
|
+
|
|
+sub stfle {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ S(0xb2b0,@_);
|
|
+}
|
|
+
|
|
+# MSA
|
|
+
|
|
+sub kmac {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb91e,@_);
|
|
+}
|
|
+
|
|
+sub km {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb92e,@_);
|
|
+}
|
|
+
|
|
+sub kmc {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb92f,@_);
|
|
+}
|
|
+
|
|
+sub kimd {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb93e,@_);
|
|
+}
|
|
+
|
|
+sub klmd {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb93f,@_);
|
|
+}
|
|
+
|
|
+# MSA4
|
|
+
|
|
+sub kmf {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb92a,@_);
|
|
+}
|
|
+
|
|
+sub kmo {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb92b,@_);
|
|
+}
|
|
+
|
|
+sub pcc {
|
|
+ confess(err("ARGNUM")) if ($#_!=-1);
|
|
+ RRE(0xb92c,@_);
|
|
+}
|
|
+
|
|
+sub kmctr {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ RRFb(0xb92d,@_);
|
|
+}
|
|
+
|
|
+# MSA5
|
|
+
|
|
+sub prno {
|
|
+ ppno(@_);
|
|
+}
|
|
+
|
|
+sub ppno { # deprecated, use prno
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ RRE(0xb93c,@_);
|
|
+}
|
|
+
|
|
+# MSA8
|
|
+
|
|
+sub kma {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ RRFb(0xb929,@_);
|
|
+}
|
|
+
|
|
+# VX - Support Instructions
|
|
+
|
|
+sub vgef {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRV(0xe713,@_);
|
|
+}
|
|
+sub vgeg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRV(0xe712,@_);
|
|
+}
|
|
+
|
|
+sub vgbm {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ VRIa(0xe744,@_);
|
|
+}
|
|
+sub vzero {
|
|
+ vgbm(@_,0);
|
|
+}
|
|
+sub vone {
|
|
+ vgbm(@_,0xffff);
|
|
+}
|
|
+
|
|
+sub vgm {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRIb(0xe746,@_);
|
|
+}
|
|
+sub vgmb {
|
|
+ vgm(@_,0);
|
|
+}
|
|
+sub vgmh {
|
|
+ vgm(@_,1);
|
|
+}
|
|
+sub vgmf {
|
|
+ vgm(@_,2);
|
|
+}
|
|
+sub vgmg {
|
|
+ vgm(@_,3);
|
|
+}
|
|
+
|
|
+sub vl {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ VRX(0xe706,@_);
|
|
+}
|
|
+
|
|
+sub vlr {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ VRRa(0xe756,@_);
|
|
+}
|
|
+
|
|
+sub vlrep {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe705,@_);
|
|
+}
|
|
+sub vlrepb {
|
|
+ vlrep(@_,0);
|
|
+}
|
|
+sub vlreph {
|
|
+ vlrep(@_,1);
|
|
+}
|
|
+sub vlrepf {
|
|
+ vlrep(@_,2);
|
|
+}
|
|
+sub vlrepg {
|
|
+ vlrep(@_,3);
|
|
+}
|
|
+
|
|
+sub vleb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe700,@_);
|
|
+}
|
|
+sub vleh {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe701,@_);
|
|
+}
|
|
+sub vlef {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe703,@_);
|
|
+}
|
|
+sub vleg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe702,@_);
|
|
+}
|
|
+
|
|
+sub vleib {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIa(0xe740,@_);
|
|
+}
|
|
+sub vleih {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIa(0xe741,@_);
|
|
+}
|
|
+sub vleif {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIa(0xe743,@_);
|
|
+}
|
|
+sub vleig {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIa(0xe742,@_);
|
|
+}
|
|
+
|
|
+sub vlgv {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSc(0xe721,@_);
|
|
+}
|
|
+sub vlgvb {
|
|
+ vlgv(@_,0);
|
|
+}
|
|
+sub vlgvh {
|
|
+ vlgv(@_,1);
|
|
+}
|
|
+sub vlgvf {
|
|
+ vlgv(@_,2);
|
|
+}
|
|
+sub vlgvg {
|
|
+ vlgv(@_,3);
|
|
+}
|
|
+
|
|
+sub vllez {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe704,@_);
|
|
+}
|
|
+sub vllezb {
|
|
+ vllez(@_,0);
|
|
+}
|
|
+sub vllezh {
|
|
+ vllez(@_,1);
|
|
+}
|
|
+sub vllezf {
|
|
+ vllez(@_,2);
|
|
+}
|
|
+sub vllezg {
|
|
+ vllez(@_,3);
|
|
+}
|
|
+
|
|
+sub vlm {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSa(0xe736,@_);
|
|
+}
|
|
+
|
|
+sub vlbb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe707,@_);
|
|
+}
|
|
+
|
|
+sub vlvg {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSb(0xe722,@_);
|
|
+}
|
|
+sub vlvgb {
|
|
+ vlvg(@_,0);
|
|
+}
|
|
+sub vlvgh {
|
|
+ vlvg(@_,1);
|
|
+}
|
|
+sub vlvgf {
|
|
+ vlvg(@_,2);
|
|
+}
|
|
+sub vlvgg {
|
|
+ vlvg(@_,3);
|
|
+}
|
|
+
|
|
+sub vlvgp {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRf(0xe762,@_);
|
|
+}
|
|
+
|
|
+sub vll {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSb(0xe737,@_);
|
|
+}
|
|
+
|
|
+sub vmrh {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe761,@_);
|
|
+}
|
|
+sub vmrhb {
|
|
+ vmrh(@_,0);
|
|
+}
|
|
+sub vmrhh {
|
|
+ vmrh(@_,1);
|
|
+}
|
|
+sub vmrhf {
|
|
+ vmrh(@_,2);
|
|
+}
|
|
+sub vmrhg {
|
|
+ vmrh(@_,3);
|
|
+}
|
|
+
|
|
+sub vmrl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe760,@_);
|
|
+}
|
|
+sub vmrlb {
|
|
+ vmrl(@_,0);
|
|
+}
|
|
+sub vmrlh {
|
|
+ vmrl(@_,1);
|
|
+}
|
|
+sub vmrlf {
|
|
+ vmrl(@_,2);
|
|
+}
|
|
+sub vmrlg {
|
|
+ vmrl(@_,3);
|
|
+}
|
|
+
|
|
+sub vpk {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe794,@_);
|
|
+}
|
|
+sub vpkh {
|
|
+ vpk(@_,1);
|
|
+}
|
|
+sub vpkf {
|
|
+ vpk(@_,2);
|
|
+}
|
|
+sub vpkg {
|
|
+ vpk(@_,3);
|
|
+}
|
|
+
|
|
+sub vpks {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRb(0xe797,@_);
|
|
+}
|
|
+sub vpksh {
|
|
+ vpks(@_,1,0);
|
|
+}
|
|
+sub vpksf {
|
|
+ vpks(@_,2,0);
|
|
+}
|
|
+sub vpksg {
|
|
+ vpks(@_,3,0);
|
|
+}
|
|
+sub vpkshs {
|
|
+ vpks(@_,1,1);
|
|
+}
|
|
+sub vpksfs {
|
|
+ vpks(@_,2,1);
|
|
+}
|
|
+sub vpksgs {
|
|
+ vpks(@_,3,1);
|
|
+}
|
|
+
|
|
+sub vpkls {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRb(0xe795,@_);
|
|
+}
|
|
+sub vpklsh {
|
|
+ vpkls(@_,1,0);
|
|
+}
|
|
+sub vpklsf {
|
|
+ vpkls(@_,2,0);
|
|
+}
|
|
+sub vpklsg {
|
|
+ vpkls(@_,3,0);
|
|
+}
|
|
+sub vpklshs {
|
|
+ vpkls(@_,1,1);
|
|
+}
|
|
+sub vpklsfs {
|
|
+ vpkls(@_,2,1);
|
|
+}
|
|
+sub vpklsgs {
|
|
+ vpkls(@_,3,1);
|
|
+}
|
|
+
|
|
+sub vperm {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRe(0xe78c,@_);
|
|
+}
|
|
+
|
|
+sub vpdi {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe784,@_);
|
|
+}
|
|
+
|
|
+sub vrep {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRIc(0xe74d,@_);
|
|
+}
|
|
+sub vrepb {
|
|
+ vrep(@_,0);
|
|
+}
|
|
+sub vreph {
|
|
+ vrep(@_,1);
|
|
+}
|
|
+sub vrepf {
|
|
+ vrep(@_,2);
|
|
+}
|
|
+sub vrepg {
|
|
+ vrep(@_,3);
|
|
+}
|
|
+
|
|
+sub vrepi {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIa(0xe745,@_);
|
|
+}
|
|
+sub vrepib {
|
|
+ vrepi(@_,0);
|
|
+}
|
|
+sub vrepih {
|
|
+ vrepi(@_,1);
|
|
+}
|
|
+sub vrepif {
|
|
+ vrepi(@_,2);
|
|
+}
|
|
+sub vrepig {
|
|
+ vrepi(@_,3);
|
|
+}
|
|
+
|
|
+sub vscef {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRV(0xe71b,@_);
|
|
+}
|
|
+sub vsceg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRV(0xe71a,@_);
|
|
+}
|
|
+
|
|
+sub vsel {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRe(0xe78d,@_);
|
|
+}
|
|
+
|
|
+sub vseg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe75f,@_);
|
|
+}
|
|
+sub vsegb {
|
|
+ vseg(@_,0);
|
|
+}
|
|
+sub vsegh {
|
|
+ vseg(@_,1);
|
|
+}
|
|
+sub vsegf {
|
|
+ vseg(@_,2);
|
|
+}
|
|
+
|
|
+sub vst {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ VRX(0xe70e,@_);
|
|
+}
|
|
+
|
|
+sub vsteb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe708,@_);
|
|
+}
|
|
+sub vsteh {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe709,@_);
|
|
+}
|
|
+sub vstef {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe70b,@_);
|
|
+}
|
|
+sub vsteg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRX(0xe70a,@_);
|
|
+}
|
|
+
|
|
+sub vstm {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSa(0xe73e,@_);
|
|
+}
|
|
+
|
|
+sub vstl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSb(0xe73f,@_);
|
|
+}
|
|
+
|
|
+sub vuph {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7d7,@_);
|
|
+}
|
|
+sub vuphb {
|
|
+ vuph(@_,0);
|
|
+}
|
|
+sub vuphh {
|
|
+ vuph(@_,1);
|
|
+}
|
|
+sub vuphf {
|
|
+ vuph(@_,2);
|
|
+}
|
|
+
|
|
+sub vuplh {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7d5,@_);
|
|
+}
|
|
+sub vuplhb {
|
|
+ vuplh(@_,0);
|
|
+}
|
|
+sub vuplhh {
|
|
+ vuplh(@_,1);
|
|
+}
|
|
+sub vuplhf {
|
|
+ vuplh(@_,2);
|
|
+}
|
|
+
|
|
+sub vupl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7d6,@_);
|
|
+}
|
|
+sub vuplb {
|
|
+ vupl(@_,0);
|
|
+}
|
|
+sub vuplhw {
|
|
+ vupl(@_,1);
|
|
+}
|
|
+sub vuplf {
|
|
+ vupl(@_,2);
|
|
+}
|
|
+
|
|
+sub vupll {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7d4,@_);
|
|
+}
|
|
+sub vupllb {
|
|
+ vupll(@_,0);
|
|
+}
|
|
+sub vupllh {
|
|
+ vupll(@_,1);
|
|
+}
|
|
+sub vupllf {
|
|
+ vupll(@_,2);
|
|
+}
|
|
+
|
|
+# VX - Integer Instructions
|
|
+
|
|
+sub va {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f3,@_);
|
|
+}
|
|
+sub vab {
|
|
+ va(@_,0);
|
|
+}
|
|
+sub vah {
|
|
+ va(@_,1);
|
|
+}
|
|
+sub vaf {
|
|
+ va(@_,2);
|
|
+}
|
|
+sub vag {
|
|
+ va(@_,3);
|
|
+}
|
|
+sub vaq {
|
|
+ va(@_,4);
|
|
+}
|
|
+
|
|
+sub vacc {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f1,@_);
|
|
+}
|
|
+sub vaccb {
|
|
+ vacc(@_,0);
|
|
+}
|
|
+sub vacch {
|
|
+ vacc(@_,1);
|
|
+}
|
|
+sub vaccf {
|
|
+ vacc(@_,2);
|
|
+}
|
|
+sub vaccg {
|
|
+ vacc(@_,3);
|
|
+}
|
|
+sub vaccq {
|
|
+ vacc(@_,4);
|
|
+}
|
|
+
|
|
+sub vac {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7bb,@_);
|
|
+}
|
|
+sub vacq {
|
|
+ vac(@_,4);
|
|
+}
|
|
+
|
|
+sub vaccc {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7b9,@_);
|
|
+}
|
|
+sub vacccq {
|
|
+ vaccc(@_,4);
|
|
+}
|
|
+
|
|
+sub vn {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe768,@_);
|
|
+}
|
|
+
|
|
+sub vnc {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe769,@_);
|
|
+}
|
|
+
|
|
+sub vavg {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f2,@_);
|
|
+}
|
|
+sub vavgb {
|
|
+ vavg(@_,0);
|
|
+}
|
|
+sub vavgh {
|
|
+ vavg(@_,1);
|
|
+}
|
|
+sub vavgf {
|
|
+ vavg(@_,2);
|
|
+}
|
|
+sub vavgg {
|
|
+ vavg(@_,3);
|
|
+}
|
|
+
|
|
+sub vavgl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f0,@_);
|
|
+}
|
|
+sub vavglb {
|
|
+ vavgl(@_,0);
|
|
+}
|
|
+sub vavglh {
|
|
+ vavgl(@_,1);
|
|
+}
|
|
+sub vavglf {
|
|
+ vavgl(@_,2);
|
|
+}
|
|
+sub vavglg {
|
|
+ vavgl(@_,3);
|
|
+}
|
|
+
|
|
+sub vcksm {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe766,@_);
|
|
+}
|
|
+
|
|
+sub vec_ {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7db,@_);
|
|
+}
|
|
+sub vecb {
|
|
+ vec_(@_,0);
|
|
+}
|
|
+sub vech {
|
|
+ vec_(@_,1);
|
|
+}
|
|
+sub vecf {
|
|
+ vec_(@_,2);
|
|
+}
|
|
+sub vecg {
|
|
+ vec_(@_,3);
|
|
+}
|
|
+
|
|
+sub vecl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7d9,@_);
|
|
+}
|
|
+sub veclb {
|
|
+ vecl(@_,0);
|
|
+}
|
|
+sub veclh {
|
|
+ vecl(@_,1);
|
|
+}
|
|
+sub veclf {
|
|
+ vecl(@_,2);
|
|
+}
|
|
+sub veclg {
|
|
+ vecl(@_,3);
|
|
+}
|
|
+
|
|
+sub vceq {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRb(0xe7f8,@_);
|
|
+}
|
|
+sub vceqb {
|
|
+ vceq(@_,0,0);
|
|
+}
|
|
+sub vceqh {
|
|
+ vceq(@_,1,0);
|
|
+}
|
|
+sub vceqf {
|
|
+ vceq(@_,2,0);
|
|
+}
|
|
+sub vceqg {
|
|
+ vceq(@_,3,0);
|
|
+}
|
|
+sub vceqbs {
|
|
+ vceq(@_,0,1);
|
|
+}
|
|
+sub vceqhs {
|
|
+ vceq(@_,1,1);
|
|
+}
|
|
+sub vceqfs {
|
|
+ vceq(@_,2,1);
|
|
+}
|
|
+sub vceqgs {
|
|
+ vceq(@_,3,1);
|
|
+}
|
|
+
|
|
+sub vch {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRb(0xe7fb,@_);
|
|
+}
|
|
+sub vchb {
|
|
+ vch(@_,0,0);
|
|
+}
|
|
+sub vchh {
|
|
+ vch(@_,1,0);
|
|
+}
|
|
+sub vchf {
|
|
+ vch(@_,2,0);
|
|
+}
|
|
+sub vchg {
|
|
+ vch(@_,3,0);
|
|
+}
|
|
+sub vchbs {
|
|
+ vch(@_,0,1);
|
|
+}
|
|
+sub vchhs {
|
|
+ vch(@_,1,1);
|
|
+}
|
|
+sub vchfs {
|
|
+ vch(@_,2,1);
|
|
+}
|
|
+sub vchgs {
|
|
+ vch(@_,3,1);
|
|
+}
|
|
+
|
|
+sub vchl {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRb(0xe7f9,@_);
|
|
+}
|
|
+sub vchlb {
|
|
+ vchl(@_,0,0);
|
|
+}
|
|
+sub vchlh {
|
|
+ vchl(@_,1,0);
|
|
+}
|
|
+sub vchlf {
|
|
+ vchl(@_,2,0);
|
|
+}
|
|
+sub vchlg {
|
|
+ vchl(@_,3,0);
|
|
+}
|
|
+sub vchlbs {
|
|
+ vchl(@_,0,1);
|
|
+}
|
|
+sub vchlhs {
|
|
+ vchl(@_,1,1);
|
|
+}
|
|
+sub vchlfs {
|
|
+ vchl(@_,2,1);
|
|
+}
|
|
+sub vchlgs {
|
|
+ vchl(@_,3,1);
|
|
+}
|
|
+
|
|
+sub vclz {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe753,@_);
|
|
+}
|
|
+sub vclzb {
|
|
+ vclz(@_,0);
|
|
+}
|
|
+sub vclzh {
|
|
+ vclz(@_,1);
|
|
+}
|
|
+sub vclzf {
|
|
+ vclz(@_,2);
|
|
+}
|
|
+sub vclzg {
|
|
+ vclz(@_,3);
|
|
+}
|
|
+
|
|
+sub vctz {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe752,@_);
|
|
+}
|
|
+sub vctzb {
|
|
+ vctz(@_,0);
|
|
+}
|
|
+sub vctzh {
|
|
+ vctz(@_,1);
|
|
+}
|
|
+sub vctzf {
|
|
+ vctz(@_,2);
|
|
+}
|
|
+sub vctzg {
|
|
+ vctz(@_,3);
|
|
+}
|
|
+
|
|
+sub vx {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76d,@_);
|
|
+}
|
|
+
|
|
+sub vgfm {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7b4,@_);
|
|
+}
|
|
+sub vgfmb {
|
|
+ vgfm(@_,0);
|
|
+}
|
|
+sub vgfmh {
|
|
+ vgfm(@_,1);
|
|
+}
|
|
+sub vgfmf {
|
|
+ vgfm(@_,2);
|
|
+}
|
|
+sub vgfmg {
|
|
+ vgfm(@_,3);
|
|
+}
|
|
+
|
|
+sub vgfma {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7bc,@_);
|
|
+}
|
|
+sub vgfmab {
|
|
+ vgfma(@_,0);
|
|
+}
|
|
+sub vgfmah {
|
|
+ vgfma(@_,1);
|
|
+}
|
|
+sub vgfmaf {
|
|
+ vgfma(@_,2);
|
|
+}
|
|
+sub vgfmag {
|
|
+ vgfma(@_,3);
|
|
+}
|
|
+
|
|
+sub vlc {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7de,@_);
|
|
+}
|
|
+sub vlcb {
|
|
+ vlc(@_,0);
|
|
+}
|
|
+sub vlch {
|
|
+ vlc(@_,1);
|
|
+}
|
|
+sub vlcf {
|
|
+ vlc(@_,2);
|
|
+}
|
|
+sub vlcg {
|
|
+ vlc(@_,3);
|
|
+}
|
|
+
|
|
+sub vlp {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe7df,@_);
|
|
+}
|
|
+sub vlpb {
|
|
+ vlp(@_,0);
|
|
+}
|
|
+sub vlph {
|
|
+ vlp(@_,1);
|
|
+}
|
|
+sub vlpf {
|
|
+ vlp(@_,2);
|
|
+}
|
|
+sub vlpg {
|
|
+ vlp(@_,3);
|
|
+}
|
|
+
|
|
+sub vmx {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7ff,@_);
|
|
+}
|
|
+sub vmxb {
|
|
+ vmx(@_,0);
|
|
+}
|
|
+sub vmxh {
|
|
+ vmx(@_,1);
|
|
+}
|
|
+sub vmxf {
|
|
+ vmx(@_,2);
|
|
+}
|
|
+sub vmxg {
|
|
+ vmx(@_,3);
|
|
+}
|
|
+
|
|
+sub vmxl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7fd,@_);
|
|
+}
|
|
+sub vmxlb {
|
|
+ vmxl(@_,0);
|
|
+}
|
|
+sub vmxlh {
|
|
+ vmxl(@_,1);
|
|
+}
|
|
+sub vmxlf {
|
|
+ vmxl(@_,2);
|
|
+}
|
|
+sub vmxlg {
|
|
+ vmxl(@_,3);
|
|
+}
|
|
+
|
|
+sub vmn {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7fe,@_);
|
|
+}
|
|
+sub vmnb {
|
|
+ vmn(@_,0);
|
|
+}
|
|
+sub vmnh {
|
|
+ vmn(@_,1);
|
|
+}
|
|
+sub vmnf {
|
|
+ vmn(@_,2);
|
|
+}
|
|
+sub vmng {
|
|
+ vmn(@_,3);
|
|
+}
|
|
+
|
|
+sub vmnl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7fc,@_);
|
|
+}
|
|
+sub vmnlb {
|
|
+ vmnl(@_,0);
|
|
+}
|
|
+sub vmnlh {
|
|
+ vmnl(@_,1);
|
|
+}
|
|
+sub vmnlf {
|
|
+ vmnl(@_,2);
|
|
+}
|
|
+sub vmnlg {
|
|
+ vmnl(@_,3);
|
|
+}
|
|
+
|
|
+sub vmal {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7aa,@_);
|
|
+}
|
|
+sub vmalb {
|
|
+ vmal(@_,0);
|
|
+}
|
|
+sub vmalhw {
|
|
+ vmal(@_,1);
|
|
+}
|
|
+sub vmalf {
|
|
+ vmal(@_,2);
|
|
+}
|
|
+
|
|
+sub vmah {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7ab,@_);
|
|
+}
|
|
+sub vmahb {
|
|
+ vmah(@_,0);
|
|
+}
|
|
+sub vmahh {
|
|
+ vmah(@_,1);
|
|
+}
|
|
+sub vmahf {
|
|
+ vmah(@_,2);
|
|
+}
|
|
+
|
|
+sub vmalh {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7a9,@_);
|
|
+}
|
|
+sub vmalhb {
|
|
+ vmalh(@_,0);
|
|
+}
|
|
+sub vmalhh {
|
|
+ vmalh(@_,1);
|
|
+}
|
|
+sub vmalhf {
|
|
+ vmalh(@_,2);
|
|
+}
|
|
+
|
|
+sub vmae {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7ae,@_);
|
|
+}
|
|
+sub vmaeb {
|
|
+ vmae(@_,0);
|
|
+}
|
|
+sub vmaeh {
|
|
+ vmae(@_,1);
|
|
+}
|
|
+sub vmaef {
|
|
+ vmae(@_,2);
|
|
+}
|
|
+
|
|
+sub vmale {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7ac,@_);
|
|
+}
|
|
+sub vmaleb {
|
|
+ vmale(@_,0);
|
|
+}
|
|
+sub vmaleh {
|
|
+ vmale(@_,1);
|
|
+}
|
|
+sub vmalef {
|
|
+ vmale(@_,2);
|
|
+}
|
|
+
|
|
+sub vmao {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7af,@_);
|
|
+}
|
|
+sub vmaob {
|
|
+ vmao(@_,0);
|
|
+}
|
|
+sub vmaoh {
|
|
+ vmao(@_,1);
|
|
+}
|
|
+sub vmaof {
|
|
+ vmao(@_,2);
|
|
+}
|
|
+
|
|
+sub vmalo {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7ad,@_);
|
|
+}
|
|
+sub vmalob {
|
|
+ vmalo(@_,0);
|
|
+}
|
|
+sub vmaloh {
|
|
+ vmalo(@_,1);
|
|
+}
|
|
+sub vmalof {
|
|
+ vmalo(@_,2);
|
|
+}
|
|
+
|
|
+sub vmh {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a3,@_);
|
|
+}
|
|
+sub vmhb {
|
|
+ vmh(@_,0);
|
|
+}
|
|
+sub vmhh {
|
|
+ vmh(@_,1);
|
|
+}
|
|
+sub vmhf {
|
|
+ vmh(@_,2);
|
|
+}
|
|
+
|
|
+sub vmlh {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a1,@_);
|
|
+}
|
|
+sub vmlhb {
|
|
+ vmlh(@_,0);
|
|
+}
|
|
+sub vmlhh {
|
|
+ vmlh(@_,1);
|
|
+}
|
|
+sub vmlhf {
|
|
+ vmlh(@_,2);
|
|
+}
|
|
+
|
|
+sub vml {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a2,@_);
|
|
+}
|
|
+sub vmlb {
|
|
+ vml(@_,0);
|
|
+}
|
|
+sub vmlhw {
|
|
+ vml(@_,1);
|
|
+}
|
|
+sub vmlf {
|
|
+ vml(@_,2);
|
|
+}
|
|
+
|
|
+sub vme {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a6,@_);
|
|
+}
|
|
+sub vmeb {
|
|
+ vme(@_,0);
|
|
+}
|
|
+sub vmeh {
|
|
+ vme(@_,1);
|
|
+}
|
|
+sub vmef {
|
|
+ vme(@_,2);
|
|
+}
|
|
+
|
|
+sub vmle {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a4,@_);
|
|
+}
|
|
+sub vmleb {
|
|
+ vmle(@_,0);
|
|
+}
|
|
+sub vmleh {
|
|
+ vmle(@_,1);
|
|
+}
|
|
+sub vmlef {
|
|
+ vmle(@_,2);
|
|
+}
|
|
+
|
|
+sub vmo {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a7,@_);
|
|
+}
|
|
+sub vmob {
|
|
+ vmo(@_,0);
|
|
+}
|
|
+sub vmoh {
|
|
+ vmo(@_,1);
|
|
+}
|
|
+sub vmof {
|
|
+ vmo(@_,2);
|
|
+}
|
|
+
|
|
+sub vmlo {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7a5,@_);
|
|
+}
|
|
+sub vmlob {
|
|
+ vmlo(@_,0);
|
|
+}
|
|
+sub vmloh {
|
|
+ vmlo(@_,1);
|
|
+}
|
|
+sub vmlof {
|
|
+ vmlo(@_,2);
|
|
+}
|
|
+
|
|
+sub vno {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76b,@_);
|
|
+}
|
|
+sub vnot {
|
|
+ vno(@_,$_[1]);
|
|
+}
|
|
+
|
|
+sub vo {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76a,@_);
|
|
+}
|
|
+
|
|
+sub vpopct {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRa(0xe750,@_);
|
|
+}
|
|
+
|
|
+sub verllv {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe773,@_);
|
|
+}
|
|
+sub verllvb {
|
|
+ verllv(@_,0);
|
|
+}
|
|
+sub verllvh {
|
|
+ verllv(@_,1);
|
|
+}
|
|
+sub verllvf {
|
|
+ verllv(@_,2);
|
|
+}
|
|
+sub verllvg {
|
|
+ verllv(@_,3);
|
|
+}
|
|
+
|
|
+sub verll {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSa(0xe733,@_);
|
|
+}
|
|
+sub verllb {
|
|
+ verll(@_,0);
|
|
+}
|
|
+sub verllh {
|
|
+ verll(@_,1);
|
|
+}
|
|
+sub verllf {
|
|
+ verll(@_,2);
|
|
+}
|
|
+sub verllg {
|
|
+ verll(@_,3);
|
|
+}
|
|
+
|
|
+sub verim {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRId(0xe772,@_);
|
|
+}
|
|
+sub verimb {
|
|
+ verim(@_,0);
|
|
+}
|
|
+sub verimh {
|
|
+ verim(@_,1);
|
|
+}
|
|
+sub verimf {
|
|
+ verim(@_,2);
|
|
+}
|
|
+sub verimg {
|
|
+ verim(@_,3);
|
|
+}
|
|
+
|
|
+sub veslv {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe770,@_);
|
|
+}
|
|
+sub veslvb {
|
|
+ veslv(@_,0);
|
|
+}
|
|
+sub veslvh {
|
|
+ veslv(@_,1);
|
|
+}
|
|
+sub veslvf {
|
|
+ veslv(@_,2);
|
|
+}
|
|
+sub veslvg {
|
|
+ veslv(@_,3);
|
|
+}
|
|
+
|
|
+sub vesl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSa(0xe730,@_);
|
|
+}
|
|
+sub veslb {
|
|
+ vesl(@_,0);
|
|
+}
|
|
+sub veslh {
|
|
+ vesl(@_,1);
|
|
+}
|
|
+sub veslf {
|
|
+ vesl(@_,2);
|
|
+}
|
|
+sub veslg {
|
|
+ vesl(@_,3);
|
|
+}
|
|
+
|
|
+sub vesrav {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe77a,@_);
|
|
+}
|
|
+sub vesravb {
|
|
+ vesrav(@_,0);
|
|
+}
|
|
+sub vesravh {
|
|
+ vesrav(@_,1);
|
|
+}
|
|
+sub vesravf {
|
|
+ vesrav(@_,2);
|
|
+}
|
|
+sub vesravg {
|
|
+ vesrav(@_,3);
|
|
+}
|
|
+
|
|
+sub vesra {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSa(0xe73a,@_);
|
|
+}
|
|
+sub vesrab {
|
|
+ vesra(@_,0);
|
|
+}
|
|
+sub vesrah {
|
|
+ vesra(@_,1);
|
|
+}
|
|
+sub vesraf {
|
|
+ vesra(@_,2);
|
|
+}
|
|
+sub vesrag {
|
|
+ vesra(@_,3);
|
|
+}
|
|
+
|
|
+sub vesrlv {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe778,@_);
|
|
+}
|
|
+sub vesrlvb {
|
|
+ vesrlv(@_,0);
|
|
+}
|
|
+sub vesrlvh {
|
|
+ vesrlv(@_,1);
|
|
+}
|
|
+sub vesrlvf {
|
|
+ vesrlv(@_,2);
|
|
+}
|
|
+sub vesrlvg {
|
|
+ vesrlv(@_,3);
|
|
+}
|
|
+
|
|
+sub vesrl {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRSa(0xe738,@_);
|
|
+}
|
|
+sub vesrlb {
|
|
+ vesrl(@_,0);
|
|
+}
|
|
+sub vesrlh {
|
|
+ vesrl(@_,1);
|
|
+}
|
|
+sub vesrlf {
|
|
+ vesrl(@_,2);
|
|
+}
|
|
+sub vesrlg {
|
|
+ vesrl(@_,3);
|
|
+}
|
|
+
|
|
+sub vsl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe774,@_);
|
|
+}
|
|
+
|
|
+sub vslb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe775,@_);
|
|
+}
|
|
+
|
|
+sub vsldb {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRId(0xe777,@_);
|
|
+}
|
|
+
|
|
+sub vsra {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe77e,@_);
|
|
+}
|
|
+
|
|
+sub vsrab {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe77f,@_);
|
|
+}
|
|
+
|
|
+sub vsrl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe77c,@_);
|
|
+}
|
|
+
|
|
+sub vsrlb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe77d,@_);
|
|
+}
|
|
+
|
|
+sub vs {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f7,@_);
|
|
+}
|
|
+sub vsb {
|
|
+ vs(@_,0);
|
|
+}
|
|
+sub vsh {
|
|
+ vs(@_,1);
|
|
+}
|
|
+sub vsf {
|
|
+ vs(@_,2);
|
|
+}
|
|
+sub vsg {
|
|
+ vs(@_,3);
|
|
+}
|
|
+sub vsq {
|
|
+ vs(@_,4);
|
|
+}
|
|
+
|
|
+sub vscbi {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe7f5,@_);
|
|
+}
|
|
+sub vscbib {
|
|
+ vscbi(@_,0);
|
|
+}
|
|
+sub vscbih {
|
|
+ vscbi(@_,1);
|
|
+}
|
|
+sub vscbif {
|
|
+ vscbi(@_,2);
|
|
+}
|
|
+sub vscbig {
|
|
+ vscbi(@_,3);
|
|
+}
|
|
+sub vscbiq {
|
|
+ vscbi(@_,4);
|
|
+}
|
|
+
|
|
+sub vsbi {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7bf,@_);
|
|
+}
|
|
+sub vsbiq {
|
|
+ vsbi(@_,4);
|
|
+}
|
|
+
|
|
+sub vsbcbi {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRd(0xe7bd,@_);
|
|
+}
|
|
+sub vsbcbiq {
|
|
+ vsbcbi(@_,4);
|
|
+}
|
|
+
|
|
+sub vsumg {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe765,@_);
|
|
+}
|
|
+sub vsumgh {
|
|
+ vsumg(@_,1);
|
|
+}
|
|
+sub vsumgf {
|
|
+ vsumg(@_,2);
|
|
+}
|
|
+
|
|
+sub vsumq {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe767,@_);
|
|
+}
|
|
+sub vsumqf {
|
|
+ vsumq(@_,2);
|
|
+}
|
|
+sub vsumqg {
|
|
+ vsumq(@_,3);
|
|
+}
|
|
+
|
|
+sub vsum {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRc(0xe764,@_);
|
|
+}
|
|
+sub vsumb {
|
|
+ vsum(@_,0);
|
|
+}
|
|
+sub vsumh {
|
|
+ vsum(@_,1);
|
|
+}
|
|
+
|
|
+sub vtm {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ VRRa(0xe7d8,@_);
|
|
+}
|
|
+
|
|
+# VX - String Instructions
|
|
+
|
|
+sub vfae {
|
|
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
|
+ VRRb(0xe782,@_);
|
|
+}
|
|
+sub vfaeb {
|
|
+ vfae(@_[0..2],0,$_[3]);
|
|
+}
|
|
+sub vfaeh {
|
|
+ vfae(@_[0..2],1,$_[3]);
|
|
+}
|
|
+sub vfaef {
|
|
+ vfae(@_[0..2],2,$_[3]);
|
|
+}
|
|
+sub vfaebs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],0,0x1|$_[3]);
|
|
+}
|
|
+sub vfaehs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],1,0x1|$_[3]);
|
|
+}
|
|
+sub vfaefs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],2,0x1|$_[3]);
|
|
+}
|
|
+sub vfaezb {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],0,0x2|$_[3]);
|
|
+}
|
|
+sub vfaezh {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],1,0x2|$_[3]);
|
|
+}
|
|
+sub vfaezf {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],2,0x2|$_[3]);
|
|
+}
|
|
+sub vfaezbs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],0,0x3|$_[3]);
|
|
+}
|
|
+sub vfaezhs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],1,0x3|$_[3]);
|
|
+}
|
|
+sub vfaezfs {
|
|
+ $_[3]=0 if (!defined($_[3]));
|
|
+ vfae(@_[0..2],2,0x3|$_[3]);
|
|
+}
|
|
+
|
|
+sub vfee {
|
|
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
|
+ VRRb(0xe780,@_);
|
|
+}
|
|
+sub vfeeb {
|
|
+ vfee(@_[0..2],0,$_[3]);
|
|
+}
|
|
+sub vfeeh {
|
|
+ vfee(@_[0..2],1,$_[3]);
|
|
+}
|
|
+sub vfeef {
|
|
+ vfee(@_[0..2],2,$_[3]);
|
|
+}
|
|
+sub vfeebs {
|
|
+ vfee(@_,0,1);
|
|
+}
|
|
+sub vfeehs {
|
|
+ vfee(@_,1,1);
|
|
+}
|
|
+sub vfeefs {
|
|
+ vfee(@_,2,1);
|
|
+}
|
|
+sub vfeezb {
|
|
+ vfee(@_,0,2);
|
|
+}
|
|
+sub vfeezh {
|
|
+ vfee(@_,1,2);
|
|
+}
|
|
+sub vfeezf {
|
|
+ vfee(@_,2,2);
|
|
+}
|
|
+sub vfeezbs {
|
|
+ vfee(@_,0,3);
|
|
+}
|
|
+sub vfeezhs {
|
|
+ vfee(@_,1,3);
|
|
+}
|
|
+sub vfeezfs {
|
|
+ vfee(@_,2,3);
|
|
+}
|
|
+
|
|
+sub vfene {
|
|
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
|
+ VRRb(0xe781,@_);
|
|
+}
|
|
+sub vfeneb {
|
|
+ vfene(@_[0..2],0,$_[3]);
|
|
+}
|
|
+sub vfeneh {
|
|
+ vfene(@_[0..2],1,$_[3]);
|
|
+}
|
|
+sub vfenef {
|
|
+ vfene(@_[0..2],2,$_[3]);
|
|
+}
|
|
+sub vfenebs {
|
|
+ vfene(@_,0,1);
|
|
+}
|
|
+sub vfenehs {
|
|
+ vfene(@_,1,1);
|
|
+}
|
|
+sub vfenefs {
|
|
+ vfene(@_,2,1);
|
|
+}
|
|
+sub vfenezb {
|
|
+ vfene(@_,0,2);
|
|
+}
|
|
+sub vfenezh {
|
|
+ vfene(@_,1,2);
|
|
+}
|
|
+sub vfenezf {
|
|
+ vfene(@_,2,2);
|
|
+}
|
|
+sub vfenezbs {
|
|
+ vfene(@_,0,3);
|
|
+}
|
|
+sub vfenezhs {
|
|
+ vfene(@_,1,3);
|
|
+}
|
|
+sub vfenezfs {
|
|
+ vfene(@_,2,3);
|
|
+}
|
|
+
|
|
+sub vistr {
|
|
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
|
|
+ VRRa(0xe75c,@_[0..2],0,$_[3]);
|
|
+}
|
|
+sub vistrb {
|
|
+ vistr(@_[0..1],0,$_[2]);
|
|
+}
|
|
+sub vistrh {
|
|
+ vistr(@_[0..1],1,$_[2]);
|
|
+}
|
|
+sub vistrf {
|
|
+ vistr(@_[0..1],2,$_[2]);
|
|
+}
|
|
+sub vistrbs {
|
|
+ vistr(@_,0,1);
|
|
+}
|
|
+sub vistrhs {
|
|
+ vistr(@_,1,1);
|
|
+}
|
|
+sub vistrfs {
|
|
+ vistr(@_,2,1);
|
|
+}
|
|
+
|
|
+sub vstrc {
|
|
+ confess(err("ARGNUM")) if ($#_<4||$#_>5);
|
|
+ VRRd(0xe78a,@_);
|
|
+}
|
|
+sub vstrcb {
|
|
+ vstrc(@_[0..3],0,$_[4]);
|
|
+}
|
|
+sub vstrch {
|
|
+ vstrc(@_[0..3],1,$_[4]);
|
|
+}
|
|
+sub vstrcf {
|
|
+ vstrc(@_[0..3],2,$_[4]);
|
|
+}
|
|
+sub vstrcbs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],0,0x1|$_[4]);
|
|
+}
|
|
+sub vstrchs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],1,0x1|$_[4]);
|
|
+}
|
|
+sub vstrcfs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],2,0x1|$_[4]);
|
|
+}
|
|
+sub vstrczb {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],0,0x2|$_[4]);
|
|
+}
|
|
+sub vstrczh {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],1,0x2|$_[4]);
|
|
+}
|
|
+sub vstrczf {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],2,0x2|$_[4]);
|
|
+}
|
|
+sub vstrczbs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],0,0x3|$_[4]);
|
|
+}
|
|
+sub vstrczhs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],1,0x3|$_[4]);
|
|
+}
|
|
+sub vstrczfs {
|
|
+ $_[4]=0 if (!defined($_[4]));
|
|
+ vstrc(@_[0..3],2,0x3|$_[4]);
|
|
+}
|
|
+
|
|
+# VX - Floating-point Instructions
|
|
+
|
|
+sub vfa {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRc(0xe7e3,@_);
|
|
+}
|
|
+sub vfadb {
|
|
+ vfa(@_,3,0);
|
|
+}
|
|
+sub wfadb {
|
|
+ vfa(@_,3,8);
|
|
+}
|
|
+
|
|
+sub wfc {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRa(0xe7cb,@_);
|
|
+}
|
|
+sub wfcdb {
|
|
+ wfc(@_,3,0);
|
|
+}
|
|
+
|
|
+sub wfk {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRa(0xe7ca,@_);
|
|
+}
|
|
+sub wfksb {
|
|
+ wfk(@_,2,0);
|
|
+}
|
|
+sub wfkdb {
|
|
+ wfk(@_,3,0);
|
|
+}
|
|
+sub wfkxb {
|
|
+ wfk(@_,4,0);
|
|
+}
|
|
+
|
|
+sub vfce {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRc(0xe7e8,@_);
|
|
+}
|
|
+sub vfcedb {
|
|
+ vfce(@_,3,0,0);
|
|
+}
|
|
+sub vfcedbs {
|
|
+ vfce(@_,3,0,1);
|
|
+}
|
|
+sub wfcedb {
|
|
+ vfce(@_,3,8,0);
|
|
+}
|
|
+sub wfcedbs {
|
|
+ vfce(@_,3,8,1);
|
|
+}
|
|
+
|
|
+sub vfch {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRc(0xe7eb,@_);
|
|
+}
|
|
+sub vfchdb {
|
|
+ vfch(@_,3,0,0);
|
|
+}
|
|
+sub vfchdbs {
|
|
+ vfch(@_,3,0,1);
|
|
+}
|
|
+sub wfchdb {
|
|
+ vfch(@_,3,8,0);
|
|
+}
|
|
+sub wfchdbs {
|
|
+ vfch(@_,3,8,1);
|
|
+}
|
|
+
|
|
+sub vfche {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRc(0xe7ea,@_);
|
|
+}
|
|
+sub vfchedb {
|
|
+ vfche(@_,3,0,0);
|
|
+}
|
|
+sub vfchedbs {
|
|
+ vfche(@_,3,0,1);
|
|
+}
|
|
+sub wfchedb {
|
|
+ vfche(@_,3,8,0);
|
|
+}
|
|
+sub wfchedbs {
|
|
+ vfche(@_,3,8,1);
|
|
+}
|
|
+
|
|
+sub vcdg {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c3,@_);
|
|
+}
|
|
+sub vcdgb {
|
|
+ vcdg(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wcdgb {
|
|
+ vcdg(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vcdlg {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c1,@_);
|
|
+}
|
|
+sub vcdlgb {
|
|
+ vcdlg(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wcdlgb {
|
|
+ vcdlg(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vcgd {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c2,@_);
|
|
+}
|
|
+sub vcgdb {
|
|
+ vcgd(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wcgdb {
|
|
+ vcgd(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vclgd {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c0,@_);
|
|
+}
|
|
+sub vclgdb {
|
|
+ vclgd(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wclgdb {
|
|
+ vclgd(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vfd {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRc(0xe7e5,@_);
|
|
+}
|
|
+sub vfddb {
|
|
+ vfd(@_,3,0);
|
|
+}
|
|
+sub wfddb {
|
|
+ vfd(@_,3,8);
|
|
+}
|
|
+
|
|
+sub vfi {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c7,@_);
|
|
+}
|
|
+sub vfidb {
|
|
+ vfi(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wfidb {
|
|
+ vfi(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vlde { # deprecated, use vfll
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRa(0xe7c4,@_);
|
|
+}
|
|
+sub vldeb { # deprecated, use vflls
|
|
+ vlde(@_,2,0);
|
|
+}
|
|
+sub wldeb { # deprecated, use wflls
|
|
+ vlde(@_,2,8);
|
|
+}
|
|
+
|
|
+sub vled { # deprecated, use vflr
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7c5,@_);
|
|
+}
|
|
+sub vledb { # deprecated, use vflrd
|
|
+ vled(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wledb { # deprecated, use wflrd
|
|
+ vled(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vfm {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRc(0xe7e7,@_);
|
|
+}
|
|
+sub vfmdb {
|
|
+ vfm(@_,3,0);
|
|
+}
|
|
+sub wfmdb {
|
|
+ vfm(@_,3,8);
|
|
+}
|
|
+
|
|
+sub vfma {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRe(0xe78f,@_);
|
|
+}
|
|
+sub vfmadb {
|
|
+ vfma(@_,0,3);
|
|
+}
|
|
+sub wfmadb {
|
|
+ vfma(@_,8,3);
|
|
+}
|
|
+
|
|
+sub vfms {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRe(0xe78e,@_);
|
|
+}
|
|
+sub vfmsdb {
|
|
+ vfms(@_,0,3);
|
|
+}
|
|
+sub wfmsdb {
|
|
+ vfms(@_,8,3);
|
|
+}
|
|
+
|
|
+sub vfpso {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRa(0xe7cc,@_);
|
|
+}
|
|
+sub vfpsodb {
|
|
+ vfpso(@_[0..1],3,0,$_[2]);
|
|
+}
|
|
+sub wfpsodb {
|
|
+ vfpso(@_[0..1],3,8,$_[2]);
|
|
+}
|
|
+sub vflcdb {
|
|
+ vfpso(@_,3,0,0);
|
|
+}
|
|
+sub wflcdb {
|
|
+ vfpso(@_,3,8,0);
|
|
+}
|
|
+sub vflndb {
|
|
+ vfpso(@_,3,0,1);
|
|
+}
|
|
+sub wflndb {
|
|
+ vfpso(@_,3,8,1);
|
|
+}
|
|
+sub vflpdb {
|
|
+ vfpso(@_,3,0,2);
|
|
+}
|
|
+sub wflpdb {
|
|
+ vfpso(@_,3,8,2);
|
|
+}
|
|
+
|
|
+sub vfsq {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRRa(0xe7ce,@_);
|
|
+}
|
|
+sub vfsqdb {
|
|
+ vfsq(@_,3,0);
|
|
+}
|
|
+sub wfsqdb {
|
|
+ vfsq(@_,3,8);
|
|
+}
|
|
+
|
|
+sub vfs {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRRc(0xe7e2,@_);
|
|
+}
|
|
+sub vfsdb {
|
|
+ vfs(@_,3,0);
|
|
+}
|
|
+sub wfsdb {
|
|
+ vfs(@_,3,8);
|
|
+}
|
|
+
|
|
+sub vftci {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIe(0xe74a,@_);
|
|
+}
|
|
+sub vftcidb {
|
|
+ vftci(@_,3,0);
|
|
+}
|
|
+sub wftcidb {
|
|
+ vftci(@_,3,8);
|
|
+}
|
|
+
|
|
+# VXE - Support Instructions
|
|
+
|
|
+sub vbperm {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe785,@_);
|
|
+}
|
|
+
|
|
+sub vllezlf {
|
|
+ vllez(@_,6);
|
|
+}
|
|
+
|
|
+# VXE - Integer Instructions
|
|
+
|
|
+sub vmsl {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRd(0xe7b8,@_);
|
|
+}
|
|
+sub vmslg {
|
|
+ vmsl(@_[0..3],3,$_[4]);
|
|
+}
|
|
+
|
|
+sub vnx {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76c,@_);
|
|
+}
|
|
+
|
|
+sub vnn {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76e,@_);
|
|
+}
|
|
+
|
|
+sub voc {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRc(0xe76f,@_);
|
|
+}
|
|
+
|
|
+sub vpopctb {
|
|
+ vpopct(@_,0);
|
|
+}
|
|
+sub vpopcth {
|
|
+ vpopct(@_,1);
|
|
+}
|
|
+sub vpopctf {
|
|
+ vpopct(@_,2);
|
|
+}
|
|
+sub vpopctg {
|
|
+ vpopct(@_,3);
|
|
+}
|
|
+
|
|
+# VXE - Floating-Point Instructions
|
|
+
|
|
+sub vfasb {
|
|
+ vfa(@_,2,0);
|
|
+}
|
|
+sub wfasb {
|
|
+ vfa(@_,2,8);
|
|
+}
|
|
+sub wfaxb {
|
|
+ vfa(@_,4,8);
|
|
+}
|
|
+
|
|
+sub wfcsb {
|
|
+ wfc(@_,2,0);
|
|
+}
|
|
+sub wfcxb {
|
|
+ wfc(@_,4,0);
|
|
+}
|
|
+
|
|
+sub vfcesb {
|
|
+ vfce(@_,2,0,0);
|
|
+}
|
|
+sub vfcesbs {
|
|
+ vfce(@_,2,0,1);
|
|
+}
|
|
+sub wfcesb {
|
|
+ vfce(@_,2,8,0);
|
|
+}
|
|
+sub wfcesbs {
|
|
+ vfce(@_,2,8,1);
|
|
+}
|
|
+sub wfcexb {
|
|
+ vfce(@_,4,8,0);
|
|
+}
|
|
+sub wfcexbs {
|
|
+ vfce(@_,4,8,1);
|
|
+}
|
|
+
|
|
+sub vfchsb {
|
|
+ vfch(@_,2,0,0);
|
|
+}
|
|
+sub vfchsbs {
|
|
+ vfch(@_,2,0,1);
|
|
+}
|
|
+sub wfchsb {
|
|
+ vfch(@_,2,8,0);
|
|
+}
|
|
+sub wfchsbs {
|
|
+ vfch(@_,2,8,1);
|
|
+}
|
|
+sub wfchxb {
|
|
+ vfch(@_,4,8,0);
|
|
+}
|
|
+sub wfchxbs {
|
|
+ vfch(@_,4,8,1);
|
|
+}
|
|
+
|
|
+sub vfchesb {
|
|
+ vfche(@_,2,0,0);
|
|
+}
|
|
+sub vfchesbs {
|
|
+ vfche(@_,2,0,1);
|
|
+}
|
|
+sub wfchesb {
|
|
+ vfche(@_,2,8,0);
|
|
+}
|
|
+sub wfchesbs {
|
|
+ vfche(@_,2,8,1);
|
|
+}
|
|
+sub wfchexb {
|
|
+ vfche(@_,4,8,0);
|
|
+}
|
|
+sub wfchexbs {
|
|
+ vfche(@_,4,8,1);
|
|
+}
|
|
+
|
|
+sub vfdsb {
|
|
+ vfd(@_,2,0);
|
|
+}
|
|
+sub wfdsb {
|
|
+ vfd(@_,2,8);
|
|
+}
|
|
+sub wfdxb {
|
|
+ vfd(@_,4,8);
|
|
+}
|
|
+
|
|
+sub vfisb {
|
|
+ vfi(@_[0..1],2,@_[2..3]);
|
|
+}
|
|
+sub wfisb {
|
|
+ vfi(@_[0..1],2,0x8|$_[2],$_[3]);
|
|
+}
|
|
+sub wfixb {
|
|
+ vfi(@_[0..1],4,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vfll {
|
|
+ vlde(@_);
|
|
+}
|
|
+sub vflls {
|
|
+ vfll(@_,2,0);
|
|
+}
|
|
+sub wflls {
|
|
+ vfll(@_,2,8);
|
|
+}
|
|
+sub wflld {
|
|
+ vfll(@_,3,8);
|
|
+}
|
|
+
|
|
+sub vflr {
|
|
+ vled(@_);
|
|
+}
|
|
+sub vflrd {
|
|
+ vflr(@_[0..1],3,@_[2..3]);
|
|
+}
|
|
+sub wflrd {
|
|
+ vflr(@_[0..1],3,0x8|$_[2],$_[3]);
|
|
+}
|
|
+sub wflrx {
|
|
+ vflr(@_[0..1],4,0x8|$_[2],$_[3]);
|
|
+}
|
|
+
|
|
+sub vfmax {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRc(0xe7ef,@_);
|
|
+}
|
|
+sub vfmaxsb {
|
|
+ vfmax(@_[0..2],2,0,$_[3]);
|
|
+}
|
|
+sub vfmaxdb {
|
|
+ vfmax(@_[0..2],3,0,$_[3]);
|
|
+}
|
|
+sub wfmaxsb {
|
|
+ vfmax(@_[0..2],2,8,$_[3]);
|
|
+}
|
|
+sub wfmaxdb {
|
|
+ vfmax(@_[0..2],3,8,$_[3]);
|
|
+}
|
|
+sub wfmaxxb {
|
|
+ vfmax(@_[0..2],4,8,$_[3]);
|
|
+}
|
|
+
|
|
+sub vfmin {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRc(0xe7ee,@_);
|
|
+}
|
|
+sub vfminsb {
|
|
+ vfmin(@_[0..2],2,0,$_[5]);
|
|
+}
|
|
+sub vfmindb {
|
|
+ vfmin(@_[0..2],3,0,$_[5]);
|
|
+}
|
|
+sub wfminsb {
|
|
+ vfmin(@_[0..2],2,8,$_[5]);
|
|
+}
|
|
+sub wfmindb {
|
|
+ vfmin(@_[0..2],3,8,$_[5]);
|
|
+}
|
|
+sub wfminxb {
|
|
+ vfmin(@_[0..2],4,8,$_[5]);
|
|
+}
|
|
+
|
|
+sub vfmsb {
|
|
+ vfm(@_,2,0);
|
|
+}
|
|
+sub wfmsb {
|
|
+ vfm(@_,2,8);
|
|
+}
|
|
+sub wfmxb {
|
|
+ vfm(@_,4,8);
|
|
+}
|
|
+
|
|
+sub vfmasb {
|
|
+ vfma(@_,0,2);
|
|
+}
|
|
+sub wfmasb {
|
|
+ vfma(@_,8,2);
|
|
+}
|
|
+sub wfmaxb {
|
|
+ vfma(@_,8,4);
|
|
+}
|
|
+
|
|
+sub vfmssb {
|
|
+ vfms(@_,0,2);
|
|
+}
|
|
+sub wfmssb {
|
|
+ vfms(@_,8,2);
|
|
+}
|
|
+sub wfmsxb {
|
|
+ vfms(@_,8,4);
|
|
+}
|
|
+
|
|
+sub vfnma {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRe(0xe79f,@_);
|
|
+}
|
|
+sub vfnmasb {
|
|
+ vfnma(@_,0,2);
|
|
+}
|
|
+sub vfnmadb {
|
|
+ vfnma(@_,0,3);
|
|
+}
|
|
+sub wfnmasb {
|
|
+ vfnma(@_,8,2);
|
|
+}
|
|
+sub wfnmadb {
|
|
+ vfnma(@_,8,3);
|
|
+}
|
|
+sub wfnmaxb {
|
|
+ vfnma(@_,8,4);
|
|
+}
|
|
+
|
|
+sub vfnms {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ VRRe(0xe79e,@_);
|
|
+}
|
|
+sub vfnmssb {
|
|
+ vfnms(@_,0,2);
|
|
+}
|
|
+sub vfnmsdb {
|
|
+ vfnms(@_,0,3);
|
|
+}
|
|
+sub wfnmssb {
|
|
+ vfnms(@_,8,2);
|
|
+}
|
|
+sub wfnmsdb {
|
|
+ vfnms(@_,8,3);
|
|
+}
|
|
+sub wfnmsxb {
|
|
+ vfnms(@_,8,4);
|
|
+}
|
|
+
|
|
+sub vfpsosb {
|
|
+ vfpso(@_[0..1],2,0,$_[2]);
|
|
+}
|
|
+sub wfpsosb {
|
|
+ vfpso(@_[0..1],2,8,$_[2]);
|
|
+}
|
|
+sub vflcsb {
|
|
+ vfpso(@_,2,0,0);
|
|
+}
|
|
+sub wflcsb {
|
|
+ vfpso(@_,2,8,0);
|
|
+}
|
|
+sub vflnsb {
|
|
+ vfpso(@_,2,0,1);
|
|
+}
|
|
+sub wflnsb {
|
|
+ vfpso(@_,2,8,1);
|
|
+}
|
|
+sub vflpsb {
|
|
+ vfpso(@_,2,0,2);
|
|
+}
|
|
+sub wflpsb {
|
|
+ vfpso(@_,2,8,2);
|
|
+}
|
|
+sub vfpsoxb {
|
|
+ vfpso(@_[0..1],4,0,$_[2]);
|
|
+}
|
|
+sub wfpsoxb {
|
|
+ vfpso(@_[0..1],4,8,$_[2]);
|
|
+}
|
|
+sub vflcxb {
|
|
+ vfpso(@_,4,0,0);
|
|
+}
|
|
+sub wflcxb {
|
|
+ vfpso(@_,4,8,0);
|
|
+}
|
|
+sub vflnxb {
|
|
+ vfpso(@_,4,0,1);
|
|
+}
|
|
+sub wflnxb {
|
|
+ vfpso(@_,4,8,1);
|
|
+}
|
|
+sub vflpxb {
|
|
+ vfpso(@_,4,0,2);
|
|
+}
|
|
+sub wflpxb {
|
|
+ vfpso(@_,4,8,2);
|
|
+}
|
|
+
|
|
+sub vfsqsb {
|
|
+ vfsq(@_,2,0);
|
|
+}
|
|
+sub wfsqsb {
|
|
+ vfsq(@_,2,8);
|
|
+}
|
|
+sub wfsqxb {
|
|
+ vfsq(@_,4,8);
|
|
+}
|
|
+
|
|
+sub vfssb {
|
|
+ vfs(@_,2,0);
|
|
+}
|
|
+sub wfssb {
|
|
+ vfs(@_,2,8);
|
|
+}
|
|
+sub wfsxb {
|
|
+ vfs(@_,4,8);
|
|
+}
|
|
+
|
|
+sub vftcisb {
|
|
+ vftci(@_,2,0);
|
|
+}
|
|
+sub wftcisb {
|
|
+ vftci(@_,2,8);
|
|
+}
|
|
+sub wftcixb {
|
|
+ vftci(@_,4,8);
|
|
+}
|
|
+
|
|
+# VXD - Support Instructions
|
|
+
|
|
+sub vlrlr {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSd(0xe637,@_);
|
|
+}
|
|
+
|
|
+sub vlrl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VSI(0xe635,@_);
|
|
+}
|
|
+
|
|
+sub vstrlr {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRSd(0xe63f,@_);
|
|
+}
|
|
+
|
|
+sub vstrl {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VSI(0xe63d,@_);
|
|
+}
|
|
+
|
|
+sub vap {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe671,@_);
|
|
+}
|
|
+
|
|
+sub vcp {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRh(0xe677,@_);
|
|
+}
|
|
+
|
|
+sub vcvb {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRi(0xe650,@_);
|
|
+}
|
|
+
|
|
+sub vcvbg {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRRi(0xe652,@_);
|
|
+}
|
|
+
|
|
+sub vcvd {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRIi(0xe658,@_);
|
|
+}
|
|
+
|
|
+sub vcvdg {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ VRIi(0xe65a,@_);
|
|
+}
|
|
+
|
|
+sub vdp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe67a,@_);
|
|
+}
|
|
+
|
|
+sub vlip {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VRIh(0xe649,@_);
|
|
+}
|
|
+
|
|
+sub vmp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe678,@_);
|
|
+}
|
|
+
|
|
+sub vmsp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe679,@_);
|
|
+}
|
|
+
|
|
+sub vpkz {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VSI(0xe634,@_);
|
|
+}
|
|
+
|
|
+sub vpsop {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIg(0xe65b,@_);
|
|
+}
|
|
+
|
|
+sub vrp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe67b,@_);
|
|
+}
|
|
+
|
|
+sub vsdp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe67e,@_);
|
|
+}
|
|
+
|
|
+sub vsrp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIg(0xe659,@_);
|
|
+}
|
|
+
|
|
+sub vsp {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ VRIf(0xe673,@_);
|
|
+}
|
|
+
|
|
+sub vtp {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ VRRg(0xe65f,@_);
|
|
+}
|
|
+
|
|
+sub vupkz {
|
|
+ confess(err("ARGNUM")) if ($#_!=2);
|
|
+ VSI(0xe63c,@_);
|
|
+}
|
|
+
|
|
+#
|
|
+# Instruction Formats
|
|
+#
|
|
+
|
|
+sub RRE {
|
|
+ confess(err("ARGNUM")) if ($#_<0||2<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$r1,$r2)=(shift,get_R(shift),get_R(shift));
|
|
+
|
|
+ $out.="\t.long\t".sprintf("%#010x",($opcode<<16|$r1<<4|$r2));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub RRFb {
|
|
+ confess(err("ARGNUM")) if ($#_<3||4<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$r1,$r3,$r2,$m4)=(shift,get_R(shift),get_R(shift)
|
|
+ ,get_R(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.long\t"
|
|
+ .sprintf("%#010x",($opcode<<16|$r3<<12|$m4<<8|$r1<<4|$r2));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub S {
|
|
+ confess(err("ARGNUM")) if ($#_<0||1<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$d2,$b2)=(shift,get_DB(shift));
|
|
+
|
|
+ $out.="\t.long\t".sprintf("%#010x",($opcode<<16|$b2<<12|$d2));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIa {
|
|
+ confess(err("ARGNUM")) if ($#_<2||3<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$i2,$m3)=(shift,get_V(shift),get_I(shift,16),
|
|
+ get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
|
|
+ $out.=sprintf("%#06x",$i2).",";
|
|
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIb {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$i2,$i3,$m4)=(shift,get_V(shift),get_I(shift,8),
|
|
+ ,get_I(shift,8),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
|
|
+ $out.=sprintf("%#06x",($i2<<8|$i3)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIc {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v3,$i2,$m4)=(shift,get_V(shift),get_V(shift),
|
|
+ ,get_I(shift,16),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v3&0xf)).",";
|
|
+ $out.=sprintf("%#06x",$i2).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRId {
|
|
+ confess(err("ARGNUM")) if ($#_<4||$#_>5);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ ,get_V(shift),get_I(shift,8),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$i4)).",";
|
|
+ $out.=sprintf("%#06x",($m5<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIe {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$i3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ ,get_I(shift,12),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
|
|
+ $out.=sprintf("%#06x",($i3<<4|$m5)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIf {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ ,get_V(shift),get_I(shift,8),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<4)|$i4>>4).",";
|
|
+ $out.=sprintf("%#06x",(($i4&0xf)<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIg {
|
|
+ confess(err("ARGNUM")) if ($#_!=5);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$i3,$i4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ ,get_I(shift,8),get_I(shift,8),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|($v2&0xf)).",";
|
|
+ $out.=sprintf("%#06x",($i4<<8|$m5<<4|$i3>>4)).",";
|
|
+ $out.=sprintf("%#06x",(($i3&0xf)<<12|RXB($v1,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIh {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$i2,$i3)=(shift,get_V(shift),get_I(shift,16),
|
|
+ get_I(shift,4));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)).",";
|
|
+ $out.=sprintf("%#06x",$i2).",";
|
|
+ $out.=sprintf("%#06x",($i3<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRIi {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$r2,$i3,$m4)=(shift,get_V(shift),get_R(shift),
|
|
+ ,get_I(shift,8),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4)|$r2).",";
|
|
+ $out.=sprintf("%#06x",($m4<<4|$i3>>4)).",";
|
|
+ $out.=sprintf("%#06x",(($i3&0xf)<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRa {
|
|
+ confess(err("ARGNUM")) if ($#_<2||5<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$m3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ get_M(shift),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",($m5<<4|$m4)).",";
|
|
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRb {
|
|
+ confess(err("ARGNUM")) if ($#_<3||5<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$m4,$m5)=(shift,get_V(shift),get_V(shift),
|
|
+ get_V(shift),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<4)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRc {
|
|
+ confess(err("ARGNUM")) if ($#_<3||6<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$m4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
|
|
+ get_V(shift),get_M(shift),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m6<<4|$m5)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v2,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRd {
|
|
+ confess(err("ARGNUM")) if ($#_<4||6<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$v4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
|
|
+ get_V(shift),get_V(shift),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m5<<8|$m6<<4)).",";
|
|
+ $out.=sprintf("%#06x",(($v4&0xf)<<12|RXB($v1,$v2,$v3,$v4)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRe {
|
|
+ confess(err("ARGNUM")) if ($#_<4||6<$#_);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$v3,$v4,$m5,$m6)=(shift,get_V(shift),get_V(shift),
|
|
+ get_V(shift),get_V(shift),get_M(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",(($v3&0xf)<<12|$m6<<8|$m5)).",";
|
|
+ $out.=sprintf("%#06x",(($v4&0xf)<<12|RXB($v1,$v2,$v3,$v4)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRf {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$r2,$r3)=(shift,get_V(shift),get_R(shift),
|
|
+ get_R(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|$r2)).",";
|
|
+ $out.=sprintf("%#06x",($r3<<12)).",";
|
|
+ $out.=sprintf("%#06x",(RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRg {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1)=(shift,get_V(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf))).",";
|
|
+ $out.=sprintf("%#06x",0x0000).",";
|
|
+ $out.=sprintf("%#06x",(RXB(0,$v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRh {
|
|
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v2,$m3)=(shift,get_V(shift),get_V(shift),
|
|
+ get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf))).",";
|
|
+ $out.=sprintf("%#06x",(($v2&0xf)<<12|$m3<<4)).",";
|
|
+ $out.=sprintf("%#06x",(RXB(0,$v1,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRRi {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$r1,$v2,$m3)=(shift,get_R(shift),get_V(shift),
|
|
+ get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|$r1<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",($m3<<4))."\,";
|
|
+ $out.=sprintf("%#06x",(RXB(0,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRSa {
|
|
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$v3,$d2,$b2,$m4)=(shift,get_V(shift),get_V(shift),
|
|
+ get_DB(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v3&0xf))).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRSb {
|
|
+ confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$r3,$d2,$b2,$m4)=(shift,get_V(shift),get_R(shift),
|
|
+ get_DB(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|$r3)).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRSc {
|
|
+ confess(err("ARGNUM")) if ($#_!=4);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$r1,$v3,$d2,$b2,$m4)=(shift,get_R(shift),get_V(shift),
|
|
+ get_DB(shift),get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|$r1<<4|($v3&0xf))).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",($m4<<12|RXB(0,$v3)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRSd {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$r3,$d2,$b2)=(shift,get_V(shift),get_R(shift),
|
|
+ get_DB(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|$r3)).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",(($v1&0xf)<<12|RXB(0,0,0,$v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRV {
|
|
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$d2,$v2,$b2,$m3)=(shift,get_V(shift),get_DVB(shift),
|
|
+ get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($v2&0xf))).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1,$v2)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VRX {
|
|
+ confess(err("ARGNUM")) if ($#_<2||$#_>3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$d2,$x2,$b2,$m3)=(shift,get_V(shift),get_DXB(shift),
|
|
+ get_M(shift));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|($v1&0xf)<<4|($x2))).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",($m3<<12|RXB($v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+sub VSI {
|
|
+ confess(err("ARGNUM")) if ($#_!=3);
|
|
+ my $ops=join(',',@_[1..$#_]);
|
|
+ my $memn=(caller(1))[3];
|
|
+ $memn=~s/^.*:://;
|
|
+ my ($opcode,$v1,$d2,$b2,$i3)=(shift,get_V(shift),get_DB(shift),
|
|
+ get_I(shift,8));
|
|
+
|
|
+ $out.="\t.word\t";
|
|
+ $out.=sprintf("%#06x",($opcode&0xff00|$i3)).",";
|
|
+ $out.=sprintf("%#06x",($b2<<12|$d2)).",";
|
|
+ $out.=sprintf("%#06x",(($v1&0xf)<<12|RXB(0,0,0,$v1)<<8|$opcode&0xff));
|
|
+ $out.="\t# $memn\t$ops\n"
|
|
+}
|
|
+
|
|
+#
|
|
+# Internal
|
|
+#
|
|
+
|
|
+sub get_R {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my $r;
|
|
+
|
|
+ for (shift) {
|
|
+ if (!defined) {
|
|
+ $r=0;
|
|
+ } elsif (/^$GR$/) {
|
|
+ $r=$1;
|
|
+ } else {
|
|
+ confess(err("PARSE"));
|
|
+ }
|
|
+ }
|
|
+ confess(err("ARGRANGE")) if ($r&~0xf);
|
|
+
|
|
+ return $r;
|
|
+}
|
|
+
|
|
+sub get_V {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my $v;
|
|
+
|
|
+ for (shift) {
|
|
+ if (!defined) {
|
|
+ $v=0;
|
|
+ } elsif (/^$VR$/) {
|
|
+ $v=$1;
|
|
+ } else {
|
|
+ confess(err("PARSE"));
|
|
+ }
|
|
+ }
|
|
+ confess(err("ARGRANGE")) if ($v&~0x1f);
|
|
+
|
|
+ return $v;
|
|
+}
|
|
+
|
|
+sub get_I {
|
|
+ confess(err("ARGNUM")) if ($#_!=1);
|
|
+ my ($i,$bits)=(shift,shift);
|
|
+
|
|
+ $i=defined($i)?(eval($i)):(0);
|
|
+ confess(err("PARSE")) if (!defined($i));
|
|
+ confess(err("ARGRANGE")) if (abs($i)&~(2**$bits-1));
|
|
+
|
|
+ return $i&(2**$bits-1);
|
|
+}
|
|
+
|
|
+sub get_M {
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my $m=shift;
|
|
+
|
|
+ $m=defined($m)?(eval($m)):(0);
|
|
+ confess(err("PARSE")) if (!defined($m));
|
|
+ confess(err("ARGRANGE")) if ($m&~0xf);
|
|
+
|
|
+ return $m;
|
|
+}
|
|
+
|
|
+sub get_DB
|
|
+{
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my ($d,$b);
|
|
+
|
|
+ for (shift) {
|
|
+ if (!defined) {
|
|
+ ($d,$b)=(0,0);
|
|
+ } elsif (/^(.+)\($GR\)$/) {
|
|
+ ($d,$b)=(eval($1),$2);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } elsif (/^(.+)$/) {
|
|
+ ($d,$b)=(eval($1),0);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } else {
|
|
+ confess(err("PARSE"));
|
|
+ }
|
|
+ }
|
|
+ confess(err("ARGRANGE")) if ($d&~0xfff||$b&~0xf);
|
|
+
|
|
+ return ($d,$b);
|
|
+}
|
|
+
|
|
+sub get_DVB
|
|
+{
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my ($d,$v,$b);
|
|
+
|
|
+ for (shift) {
|
|
+ if (!defined) {
|
|
+ ($d,$v,$b)=(0,0,0);
|
|
+ } elsif (/^(.+)\($VR,$GR\)$/) {
|
|
+ ($d,$v,$b)=(eval($1),$2,$3);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } elsif (/^(.+)\($GR\)$/) {
|
|
+ ($d,$v,$b)=(eval($1),0,$2);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } elsif (/^(.+)$/) {
|
|
+ ($d,$v,$b)=(eval($1),0,0);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } else {
|
|
+ confess(err("PARSE"));
|
|
+ }
|
|
+ }
|
|
+ confess(err("ARGRANGE")) if ($d&~0xfff||$v&~0x1f||$b&~0xf);
|
|
+
|
|
+ return ($d,$v,$b);
|
|
+}
|
|
+
|
|
+sub get_DXB
|
|
+{
|
|
+ confess(err("ARGNUM")) if ($#_!=0);
|
|
+ my ($d,$x,$b);
|
|
+
|
|
+ for (shift) {
|
|
+ if (!defined) {
|
|
+ ($d,$x,$b)=(0,0,0);
|
|
+ } elsif (/^(.+)\($GR,$GR\)$/) {
|
|
+ ($d,$x,$b)=(eval($1),$2,$3);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } elsif (/^(.+)\($GR\)$/) {
|
|
+ ($d,$x,$b)=(eval($1),0,$2);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } elsif (/^(.+)$/) {
|
|
+ ($d,$x,$b)=(eval($1),0,0);
|
|
+ confess(err("PARSE")) if (!defined($d));
|
|
+ } else {
|
|
+ confess(err("PARSE"));
|
|
+ }
|
|
+ }
|
|
+ confess(err("ARGRANGE")) if ($d&~0xfff||$x&~0xf||$b&~0xf);
|
|
+
|
|
+ return ($d,$x,$b);
|
|
+}
|
|
+
|
|
+sub RXB
|
|
+{
|
|
+ confess(err("ARGNUM")) if ($#_<0||3<$#_);
|
|
+ my $rxb=0;
|
|
+
|
|
+ $rxb|=0x08 if (defined($_[0])&&($_[0]&0x10));
|
|
+ $rxb|=0x04 if (defined($_[1])&&($_[1]&0x10));
|
|
+ $rxb|=0x02 if (defined($_[2])&&($_[2]&0x10));
|
|
+ $rxb|=0x01 if (defined($_[3])&&($_[3]&0x10));
|
|
+
|
|
+ return $rxb;
|
|
+}
|
|
+
|
|
+sub err {
|
|
+ my %ERR =
|
|
+ (
|
|
+ ARGNUM => 'Wrong number of arguments',
|
|
+ ARGRANGE=> 'Argument out of range',
|
|
+ PARSE => 'Parse error',
|
|
+ );
|
|
+ confess($ERR{ARGNUM}) if ($#_!=0);
|
|
+
|
|
+ return $ERR{$_[0]};
|
|
+}
|
|
+
|
|
+1;
|
|
--
|
|
2.21.0
|
|
|