diff --git a/asset-manifest.json b/asset-manifest.json
index fdb726b..79286fe 100644
--- a/asset-manifest.json
+++ b/asset-manifest.json
@@ -1,7 +1,7 @@
{
"files": {
"main.css": "/RISC-V_ISA/static/css/main.9b21dfb9.css",
- "main.js": "/RISC-V_ISA/static/js/main.d7491204.js",
+ "main.js": "/RISC-V_ISA/static/js/main.cda53fe5.js",
"static/media/IBMPlexSerif-SemiBoldItalic-Cyrillic.woff": "/RISC-V_ISA/static/media/IBMPlexSerif-SemiBoldItalic-Cyrillic.d96e5a614e96c351c453.woff",
"static/media/IBMPlexSerif-SemiBoldItalic-Latin1.woff": "/RISC-V_ISA/static/media/IBMPlexSerif-SemiBoldItalic-Latin1.b691d8c0c5110ea3659e.woff",
"static/media/IBMPlexSerif-Italic-Cyrillic.woff": "/RISC-V_ISA/static/media/IBMPlexSerif-Italic-Cyrillic.452cc78a1baf50168631.woff",
@@ -184,10 +184,10 @@
"static/media/IBMPlexMono-Regular-Latin3.woff2": "/RISC-V_ISA/static/media/IBMPlexMono-Regular-Latin3.cacfd1d7dbd14067b970.woff2",
"index.html": "/RISC-V_ISA/index.html",
"main.9b21dfb9.css.map": "/RISC-V_ISA/static/css/main.9b21dfb9.css.map",
- "main.d7491204.js.map": "/RISC-V_ISA/static/js/main.d7491204.js.map"
+ "main.cda53fe5.js.map": "/RISC-V_ISA/static/js/main.cda53fe5.js.map"
},
"entrypoints": [
"static/css/main.9b21dfb9.css",
- "static/js/main.d7491204.js"
+ "static/js/main.cda53fe5.js"
]
}
\ No newline at end of file
diff --git a/index.html b/index.html
index 4e6787c..5bcaa90 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-
RISC-V ISA
\ No newline at end of file
+RISC-V ISA
\ No newline at end of file
diff --git a/static/js/main.d7491204.js b/static/js/main.cda53fe5.js
similarity index 54%
rename from static/js/main.d7491204.js
rename to static/js/main.cda53fe5.js
index db618fa..f8729f4 100644
--- a/static/js/main.d7491204.js
+++ b/static/js/main.cda53fe5.js
@@ -1,3 +1,3 @@
-/*! For license information please see main.d7491204.js.LICENSE.txt */
-!function(){var e={694:function(e,i){var t;!function(){"use strict";var _={}.hasOwnProperty;function s(){for(var e=[],i=0;i=i||t<0||m&&e-d>=a}function w(){var e=b();if(E(e))return h(e);r=setTimeout(w,function(e){var t=i-(e-l);return m?f(t,a-(e-d)):t}(e))}function h(e){return r=void 0,v&&_?c(e):(_=s=void 0,n)}function x(){var e=b(),t=E(e);if(_=arguments,s=this,l=e,t){if(void 0===r)return function(e){return d=e,r=setTimeout(w,i),o?c(e):n}(l);if(m)return r=setTimeout(w,i),c(l)}return void 0===r&&(r=setTimeout(w,i)),n}return i=g(i)||0,p(t)&&(o=!!t.leading,a=(m="maxWait"in t)?u(g(t.maxWait)||0,i):a,v="trailing"in t?!!t.trailing:v),x.cancel=function(){void 0!==r&&clearTimeout(r),d=0,_=l=s=r=void 0},x.flush=function(){return void 0===r?n:h(b())},x}},725:function(e){"use strict";var i=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var i={},t=0;t<10;t++)i["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(i).map((function(e){return i[e]})).join(""))return!1;var _={};return"abcdefghijklmnopqrst".split("").forEach((function(e){_[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},_)).join("")}catch(s){return!1}}()?Object.assign:function(e,s){for(var a,n,r=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function m(e,i){for(var t=0;ti}return!1}(i,t,s,_)&&(t=null),_||null===s?function(e){return!!c.call(f,e)||!c.call(u,e)&&(v.test(e)?f[e]=!0:(u[e]=!0,!1))}(i)&&(null===t?e.removeAttribute(i):e.setAttribute(i,""+t)):s.mustUseProperty?e[s.propertyName]=null===t?3!==s.type&&"":t:(i=s.attributeName,_=s.attributeNamespace,null===t?e.removeAttribute(i):(t=3===(s=s.type)||4===s&&!0===t?"":""+t,_?e.setAttributeNS(_,i,t):e.setAttribute(i,t))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){p[e]=new b(e,1,!1,e.toLowerCase(),null,!1,!1)})),p.xlinkHref=new b("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){p[e]=new b(e,1,!1,e.toLowerCase(),null,!0,!0)}));var h=_.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,z=60106,L=60107,M=60108,R=60114,S=60109,D=60110,y=60112,V=60113,A=60120,T=60115,W=60116,U=60121,I=60128,B=60129,O=60130,F=60131;if("function"===typeof Symbol&&Symbol.for){var q=Symbol.for;x=q("react.element"),z=q("react.portal"),L=q("react.fragment"),M=q("react.strict_mode"),R=q("react.profiler"),S=q("react.provider"),D=q("react.context"),y=q("react.forward_ref"),V=q("react.suspense"),A=q("react.suspense_list"),T=q("react.memo"),W=q("react.lazy"),U=q("react.block"),q("react.scope"),I=q("react.opaque.id"),B=q("react.debug_trace_mode"),O=q("react.offscreen"),F=q("react.legacy_hidden")}var X,C="function"===typeof Symbol&&Symbol.iterator;function H(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=C&&e[C]||e["@@iterator"])?e:null}function k(e){if(void 0===X)try{throw Error()}catch(t){var i=t.stack.trim().match(/\n( *(at )?)/);X=i&&i[1]||""}return"\n"+X+e}var N=!1;function Z(e,i){if(!e||N)return"";N=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(i)if(i=function(){throw Error()},Object.defineProperty(i.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(i,[])}catch(l){var _=l}Reflect.construct(e,[],i)}else{try{i.call()}catch(l){_=l}e.call(i.prototype)}else{try{throw Error()}catch(l){_=l}e()}}catch(l){if(l&&_&&"string"===typeof l.stack){for(var s=l.stack.split("\n"),a=_.stack.split("\n"),n=s.length-1,r=a.length-1;1<=n&&0<=r&&s[n]!==a[r];)r--;for(;1<=n&&0<=r;n--,r--)if(s[n]!==a[r]){if(1!==n||1!==r)do{if(n--,0>--r||s[n]!==a[r])return"\n"+s[n].replace(" at new "," at ")}while(1<=n&&0<=r);break}}}finally{N=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?k(e):""}function Y(e){switch(e.tag){case 5:return k(e.type);case 16:return k("Lazy");case 13:return k("Suspense");case 19:return k("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function P(e){if(null==e)return null;if("function"===typeof e)return e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case L:return"Fragment";case z:return"Portal";case R:return"Profiler";case M:return"StrictMode";case V:return"Suspense";case A:return"SuspenseList"}if("object"===typeof e)switch(e.$$typeof){case D:return(e.displayName||"Context")+".Consumer";case S:return(e._context.displayName||"Context")+".Provider";case y:var i=e.render;return i=i.displayName||i.name||"",e.displayName||(""!==i?"ForwardRef("+i+")":"ForwardRef");case T:return P(e.type);case U:return P(e._render);case W:i=e._payload,e=e._init;try{return P(e(i))}catch(t){}}return null}function j(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function K(e){var i=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===i||"radio"===i)}function G(e){e._valueTracker||(e._valueTracker=function(e){var i=K(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,i),_=""+e[i];if(!e.hasOwnProperty(i)&&"undefined"!==typeof t&&"function"===typeof t.get&&"function"===typeof t.set){var s=t.get,a=t.set;return Object.defineProperty(e,i,{configurable:!0,get:function(){return s.call(this)},set:function(e){_=""+e,a.call(this,e)}}),Object.defineProperty(e,i,{enumerable:t.enumerable}),{getValue:function(){return _},setValue:function(e){_=""+e},stopTracking:function(){e._valueTracker=null,delete e[i]}}}}(e))}function Q(e){if(!e)return!1;var i=e._valueTracker;if(!i)return!0;var t=i.getValue(),_="";return e&&(_=K(e)?e.checked?"true":"false":e.value),(e=_)!==t&&(i.setValue(e),!0)}function J(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(i){return e.body}}function $(e,i){var t=i.checked;return s({},i,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function ee(e,i){var t=null==i.defaultValue?"":i.defaultValue,_=null!=i.checked?i.checked:i.defaultChecked;t=j(null!=i.value?i.value:t),e._wrapperState={initialChecked:_,initialValue:t,controlled:"checkbox"===i.type||"radio"===i.type?null!=i.checked:null!=i.value}}function ie(e,i){null!=(i=i.checked)&&w(e,"checked",i,!1)}function te(e,i){ie(e,i);var t=j(i.value),_=i.type;if(null!=t)"number"===_?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===_||"reset"===_)return void e.removeAttribute("value");i.hasOwnProperty("value")?se(e,i.type,t):i.hasOwnProperty("defaultValue")&&se(e,i.type,j(i.defaultValue)),null==i.checked&&null!=i.defaultChecked&&(e.defaultChecked=!!i.defaultChecked)}function _e(e,i,t){if(i.hasOwnProperty("value")||i.hasOwnProperty("defaultValue")){var _=i.type;if(!("submit"!==_&&"reset"!==_||void 0!==i.value&&null!==i.value))return;i=""+e._wrapperState.initialValue,t||i===e.value||(e.value=i),e.defaultValue=i}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function se(e,i,t){"number"===i&&J(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}function ae(e,i){return e=s({children:void 0},i),(i=function(e){var i="";return _.Children.forEach(e,(function(e){null!=e&&(i+=e)})),i}(i.children))&&(e.children=i),e}function ne(e,i,t,_){if(e=e.options,i){i={};for(var s=0;s=t.length))throw Error(n(93));t=t[0]}i=t}null==i&&(i=""),t=i}e._wrapperState={initialValue:j(t)}}function de(e,i){var t=j(i.value),_=j(i.defaultValue);null!=t&&((t=""+t)!==e.value&&(e.value=t),null==i.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=_&&(e.defaultValue=""+_)}function oe(e){var i=e.textContent;i===e._wrapperState.initialValue&&""!==i&&null!==i&&(e.value=i)}var me={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function ve(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ce(e,i){return null==e||"http://www.w3.org/1999/xhtml"===e?ve(i):"http://www.w3.org/2000/svg"===e&&"foreignObject"===i?"http://www.w3.org/1999/xhtml":e}var ue,fe,be=(fe=function(e,i){if(e.namespaceURI!==me.svg||"innerHTML"in e)e.innerHTML=i;else{for((ue=ue||document.createElement("div")).innerHTML="",i=ue.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;i.firstChild;)e.appendChild(i.firstChild)}},"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,i,t,_){MSApp.execUnsafeLocalFunction((function(){return fe(e,i)}))}:fe);function pe(e,i){if(i){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=i)}e.textContent=i}var ge={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ee=["Webkit","ms","Moz","O"];function we(e,i,t){return null==i||"boolean"===typeof i||""===i?"":t||"number"!==typeof i||0===i||ge.hasOwnProperty(e)&&ge[e]?(""+i).trim():i+"px"}function he(e,i){for(var t in e=e.style,i)if(i.hasOwnProperty(t)){var _=0===t.indexOf("--"),s=we(t,i[t],_);"float"===t&&(t="cssFloat"),_?e.setProperty(t,s):e[t]=s}}Object.keys(ge).forEach((function(e){Ee.forEach((function(i){i=i+e.charAt(0).toUpperCase()+e.substring(1),ge[i]=ge[e]}))}));var xe=s({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ze(e,i){if(i){if(xe[e]&&(null!=i.children||null!=i.dangerouslySetInnerHTML))throw Error(n(137,e));if(null!=i.dangerouslySetInnerHTML){if(null!=i.children)throw Error(n(60));if("object"!==typeof i.dangerouslySetInnerHTML||!("__html"in i.dangerouslySetInnerHTML))throw Error(n(61))}if(null!=i.style&&"object"!==typeof i.style)throw Error(n(62))}}function Le(e,i){if(-1===e.indexOf("-"))return"string"===typeof i.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Me(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Re=null,Se=null,De=null;function ye(e){if(e=is(e)){if("function"!==typeof Re)throw Error(n(280));var i=e.stateNode;i&&(i=_s(i),Re(e.stateNode,e.type,i))}}function Ve(e){Se?De?De.push(e):De=[e]:Se=e}function Ae(){if(Se){var e=Se,i=De;if(De=Se=null,ye(e),i)for(e=0;e(_=31-ki(_))?0:1<<_)<<1)-1,0!==i&&i!==_&&0===(i&n)){if(Bi(i),s<=Ii)return i;Ii=s}if(0!==(i=e.entangledLanes))for(e=e.entanglements,i&=_;0t;t++)i.push(e);return i}function Hi(e,i,t){e.pendingLanes|=i;var _=i-1;e.suspendedLanes&=_,e.pingedLanes&=_,(e=e.eventTimes)[i=31-ki(i)]=t}var ki=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ni(e)/Zi|0)|0},Ni=Math.log,Zi=Math.LN2;var Yi=a.unstable_UserBlockingPriority,Pi=a.unstable_runWithPriority,ji=!0;function Ki(e,i,t,_){Be||Ue();var s=Qi,a=Be;Be=!0;try{We(s,e,i,t,_)}finally{(Be=a)||Fe()}}function Gi(e,i,t,_){Pi(Yi,Qi.bind(null,e,i,t,_))}function Qi(e,i,t,_){var s;if(ji)if((s=0===(4&i))&&0=Bt),qt=String.fromCharCode(32),Xt=!1;function Ct(e,i){switch(e){case"keyup":return-1!==Ut.indexOf(i.keyCode);case"keydown":return 229!==i.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ht(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var kt=!1;var Nt={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zt(e){var i=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===i?!!Nt[e.type]:"textarea"===i}function Yt(e,i,t,_){Ve(_),0<(i=I_(i,"onChange")).length&&(t=new mt("onChange","change",null,t,_),e.push({event:t,listeners:i}))}var Pt=null,jt=null;function Kt(e){S_(e,0)}function Gt(e){if(Q(ts(e)))return e}function Qt(e,i){if("change"===e)return i}var Jt=!1;if(m){var $t;if(m){var e_="oninput"in document;if(!e_){var i_=document.createElement("div");i_.setAttribute("oninput","return;"),e_="function"===typeof i_.oninput}$t=e_}else $t=!1;Jt=$t&&(!document.documentMode||9=i)return{node:_,offset:i-e};e=t}e:{for(;_;){if(_.nextSibling){_=_.nextSibling;break e}_=_.parentNode}_=void 0}_=m_(_)}}function c_(e,i){return!(!e||!i)&&(e===i||(!e||3!==e.nodeType)&&(i&&3===i.nodeType?c_(e,i.parentNode):"contains"in e?e.contains(i):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(i))))}function u_(){for(var e=window,i=J();i instanceof e.HTMLIFrameElement;){try{var t="string"===typeof i.contentWindow.location.href}catch(_){t=!1}if(!t)break;i=J((e=i.contentWindow).document)}return i}function f_(e){var i=e&&e.nodeName&&e.nodeName.toLowerCase();return i&&("input"===i&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===i||"true"===e.contentEditable)}var b_=m&&"documentMode"in document&&11>=document.documentMode,p_=null,g_=null,E_=null,w_=!1;function h_(e,i,t){var _=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;w_||null==p_||p_!==J(_)||("selectionStart"in(_=p_)&&f_(_)?_={start:_.selectionStart,end:_.selectionEnd}:_={anchorNode:(_=(_.ownerDocument&&_.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:_.anchorOffset,focusNode:_.focusNode,focusOffset:_.focusOffset},E_&&o_(E_,_)||(E_=_,0<(_=I_(g_,"onSelect")).length&&(i=new mt("onSelect","select",null,i,t),e.push({event:i,listeners:_}),i.target=p_)))}Ui("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Ui("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Ui(Wi,2);for(var x_="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),z_=0;z_ns||(e.current=as[ns],as[ns]=null,ns--)}function ds(e,i){ns++,as[ns]=e.current,e.current=i}var os={},ms=rs(os),vs=rs(!1),cs=os;function us(e,i){var t=e.type.contextTypes;if(!t)return os;var _=e.stateNode;if(_&&_.__reactInternalMemoizedUnmaskedChildContext===i)return _.__reactInternalMemoizedMaskedChildContext;var s,a={};for(s in t)a[s]=i[s];return _&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=i,e.__reactInternalMemoizedMaskedChildContext=a),a}function fs(e){return null!==(e=e.childContextTypes)&&void 0!==e}function bs(){ls(vs),ls(ms)}function ps(e,i,t){if(ms.current!==os)throw Error(n(168));ds(ms,i),ds(vs,t)}function gs(e,i,t){var _=e.stateNode;if(e=i.childContextTypes,"function"!==typeof _.getChildContext)return t;for(var a in _=_.getChildContext())if(!(a in e))throw Error(n(108,P(i)||"Unknown",a));return s({},t,_)}function Es(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||os,cs=ms.current,ds(ms,e),ds(vs,vs.current),!0}function ws(e,i,t){var _=e.stateNode;if(!_)throw Error(n(169));t?(e=gs(e,i,cs),_.__reactInternalMemoizedMergedChildContext=e,ls(vs),ls(ms),ds(ms,e)):ls(vs),ds(vs,t)}var hs=null,xs=null,zs=a.unstable_runWithPriority,Ls=a.unstable_scheduleCallback,Ms=a.unstable_cancelCallback,Rs=a.unstable_shouldYield,Ss=a.unstable_requestPaint,Ds=a.unstable_now,ys=a.unstable_getCurrentPriorityLevel,Vs=a.unstable_ImmediatePriority,As=a.unstable_UserBlockingPriority,Ts=a.unstable_NormalPriority,Ws=a.unstable_LowPriority,Us=a.unstable_IdlePriority,Is={},Bs=void 0!==Ss?Ss:function(){},Os=null,Fs=null,qs=!1,Xs=Ds(),Cs=1e4>Xs?Ds:function(){return Ds()-Xs};function Hs(){switch(ys()){case Vs:return 99;case As:return 98;case Ts:return 97;case Ws:return 96;case Us:return 95;default:throw Error(n(332))}}function ks(e){switch(e){case 99:return Vs;case 98:return As;case 97:return Ts;case 96:return Ws;case 95:return Us;default:throw Error(n(332))}}function Ns(e,i){return e=ks(e),zs(e,i)}function Zs(e,i,t){return e=ks(e),Ls(e,i,t)}function Ys(){if(null!==Fs){var e=Fs;Fs=null,Ms(e)}Ps()}function Ps(){if(!qs&&null!==Os){qs=!0;var e=0;try{var i=Os;Ns(99,(function(){for(;ef?(b=m,m=null):b=m.sibling;var p=c(s,m,r[f],l);if(null===p){null===m&&(m=b);break}e&&m&&null===p.alternate&&i(s,m),n=a(p,n,f),null===o?d=p:o.sibling=p,o=p,m=b}if(f===r.length)return t(s,m),d;if(null===m){for(;fb?(p=f,f=null):p=f.sibling;var E=c(s,f,g.value,d);if(null===E){null===f&&(f=p);break}e&&f&&null===E.alternate&&i(s,f),r=a(E,r,b),null===m?o=E:m.sibling=E,m=E,f=p}if(g.done)return t(s,f),o;if(null===f){for(;!g.done;b++,g=l.next())null!==(g=v(s,g.value,d))&&(r=a(g,r,b),null===m?o=g:m.sibling=g,m=g);return o}for(f=_(s,f);!g.done;b++,g=l.next())null!==(g=u(f,s,b,g.value,d))&&(e&&null!==g.alternate&&f.delete(null===g.key?b:g.key),r=a(g,r,b),null===m?o=g:m.sibling=g,m=g);return e&&f.forEach((function(e){return i(s,e)})),o}return function(e,_,a,l){var d="object"===typeof a&&null!==a&&a.type===L&&null===a.key;d&&(a=a.props.children);var o="object"===typeof a&&null!==a;if(o)switch(a.$$typeof){case x:e:{for(o=a.key,d=_;null!==d;){if(d.key===o){if(7===d.tag){if(a.type===L){t(e,d.sibling),(_=s(d,a.props.children)).return=e,e=_;break e}}else if(d.elementType===a.type){t(e,d.sibling),(_=s(d,a.props)).ref=ha(e,d,a),_.return=e,e=_;break e}t(e,d);break}i(e,d),d=d.sibling}a.type===L?((_=Pl(a.props.children,e.mode,l,a.key)).return=e,e=_):((l=Yl(a.type,a.key,a.props,null,e.mode,l)).ref=ha(e,_,a),l.return=e,e=l)}return r(e);case z:e:{for(d=a.key;null!==_;){if(_.key===d){if(4===_.tag&&_.stateNode.containerInfo===a.containerInfo&&_.stateNode.implementation===a.implementation){t(e,_.sibling),(_=s(_,a.children||[])).return=e,e=_;break e}t(e,_);break}i(e,_),_=_.sibling}(_=Gl(a,e.mode,l)).return=e,e=_}return r(e)}if("string"===typeof a||"number"===typeof a)return a=""+a,null!==_&&6===_.tag?(t(e,_.sibling),(_=s(_,a)).return=e,e=_):(t(e,_),(_=Kl(a,e.mode,l)).return=e,e=_),r(e);if(wa(a))return f(e,_,a,l);if(H(a))return b(e,_,a,l);if(o&&xa(e,a),"undefined"===typeof a&&!d)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(n(152,P(e.type)||"Component"))}return t(e,_)}}var La=za(!0),Ma=za(!1),Ra={},Sa=rs(Ra),Da=rs(Ra),ya=rs(Ra);function Va(e){if(e===Ra)throw Error(n(174));return e}function Aa(e,i){switch(ds(ya,i),ds(Da,e),ds(Sa,Ra),e=i.nodeType){case 9:case 11:i=(i=i.documentElement)?i.namespaceURI:ce(null,"");break;default:i=ce(i=(e=8===e?i.parentNode:i).namespaceURI||null,e=e.tagName)}ls(Sa),ds(Sa,i)}function Ta(){ls(Sa),ls(Da),ls(ya)}function Wa(e){Va(ya.current);var i=Va(Sa.current),t=ce(i,e.type);i!==t&&(ds(Da,e),ds(Sa,t))}function Ua(e){Da.current===e&&(ls(Sa),ls(Da))}var Ia=rs(0);function Ba(e){for(var i=e;null!==i;){if(13===i.tag){var t=i.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||"$?"===t.data||"$!"===t.data))return i}else if(19===i.tag&&void 0!==i.memoizedProps.revealOrder){if(0!==(64&i.flags))return i}else if(null!==i.child){i.child.return=i,i=i.child;continue}if(i===e)break;for(;null===i.sibling;){if(null===i.return||i.return===e)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var Oa=null,Fa=null,qa=!1;function Xa(e,i){var t=kl(5,null,null,0);t.elementType="DELETED",t.type="DELETED",t.stateNode=i,t.return=e,t.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=t,e.lastEffect=t):e.firstEffect=e.lastEffect=t}function Ca(e,i){switch(e.tag){case 5:var t=e.type;return null!==(i=1!==i.nodeType||t.toLowerCase()!==i.nodeName.toLowerCase()?null:i)&&(e.stateNode=i,!0);case 6:return null!==(i=""===e.pendingProps||3!==i.nodeType?null:i)&&(e.stateNode=i,!0);default:return!1}}function Ha(e){if(qa){var i=Fa;if(i){var t=i;if(!Ca(e,i)){if(!(i=Y_(t.nextSibling))||!Ca(e,i))return e.flags=-1025&e.flags|2,qa=!1,void(Oa=e);Xa(Oa,t)}Oa=e,Fa=Y_(i.firstChild)}else e.flags=-1025&e.flags|2,qa=!1,Oa=e}}function ka(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Oa=e}function Na(e){if(e!==Oa)return!1;if(!qa)return ka(e),qa=!0,!1;var i=e.type;if(5!==e.tag||"head"!==i&&"body"!==i&&!H_(i,e.memoizedProps))for(i=Fa;i;)Xa(e,i),i=Y_(i.nextSibling);if(ka(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(n(317));e:{for(e=e.nextSibling,i=0;e;){if(8===e.nodeType){var t=e.data;if("/$"===t){if(0===i){Fa=Y_(e.nextSibling);break e}i--}else"$"!==t&&"$!"!==t&&"$?"!==t||i++}e=e.nextSibling}Fa=null}}else Fa=Oa?Y_(e.stateNode.nextSibling):null;return!0}function Za(){Fa=Oa=null,qa=!1}var Ya=[];function Pa(){for(var e=0;ea))throw Error(n(301));a+=1,$a=Ja=null,i.updateQueue=null,ja.current=Wn,e=t(_,s)}while(tn)}if(ja.current=Vn,i=null!==Ja&&null!==Ja.next,Ga=0,$a=Ja=Qa=null,en=!1,i)throw Error(n(300));return e}function nn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===$a?Qa.memoizedState=$a=e:$a=$a.next=e,$a}function rn(){if(null===Ja){var e=Qa.alternate;e=null!==e?e.memoizedState:null}else e=Ja.next;var i=null===$a?Qa.memoizedState:$a.next;if(null!==i)$a=i,Ja=e;else{if(null===e)throw Error(n(310));e={memoizedState:(Ja=e).memoizedState,baseState:Ja.baseState,baseQueue:Ja.baseQueue,queue:Ja.queue,next:null},null===$a?Qa.memoizedState=$a=e:$a=$a.next=e}return $a}function ln(e,i){return"function"===typeof i?i(e):i}function dn(e){var i=rn(),t=i.queue;if(null===t)throw Error(n(311));t.lastRenderedReducer=e;var _=Ja,s=_.baseQueue,a=t.pending;if(null!==a){if(null!==s){var r=s.next;s.next=a.next,a.next=r}_.baseQueue=s=a,t.pending=null}if(null!==s){s=s.next,_=_.baseState;var l=r=a=null,d=s;do{var o=d.lane;if((Ga&o)===o)null!==l&&(l=l.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),_=d.eagerReducer===e?d.eagerState:e(_,d.action);else{var m={lane:o,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};null===l?(r=l=m,a=_):l=l.next=m,Qa.lanes|=o,Xr|=o}d=d.next}while(null!==d&&d!==s);null===l?a=_:l.next=r,l_(_,i.memoizedState)||(In=!0),i.memoizedState=_,i.baseState=a,i.baseQueue=l,t.lastRenderedState=_}return[i.memoizedState,t.dispatch]}function on(e){var i=rn(),t=i.queue;if(null===t)throw Error(n(311));t.lastRenderedReducer=e;var _=t.dispatch,s=t.pending,a=i.memoizedState;if(null!==s){t.pending=null;var r=s=s.next;do{a=e(a,r.action),r=r.next}while(r!==s);l_(a,i.memoizedState)||(In=!0),i.memoizedState=a,null===i.baseQueue&&(i.baseState=a),t.lastRenderedState=a}return[a,_]}function mn(e,i,t){var _=i._getVersion;_=_(i._source);var s=i._workInProgressVersionPrimary;if(null!==s?e=s===_:(e=e.mutableReadLanes,(e=(Ga&e)===e)&&(i._workInProgressVersionPrimary=_,Ya.push(i))),e)return t(i._source);throw Ya.push(i),Error(n(350))}function vn(e,i,t,_){var s=Tr;if(null===s)throw Error(n(349));var a=i._getVersion,r=a(i._source),l=ja.current,d=l.useState((function(){return mn(s,i,t)})),o=d[1],m=d[0];d=$a;var v=e.memoizedState,c=v.refs,u=c.getSnapshot,f=v.source;v=v.subscribe;var b=Qa;return e.memoizedState={refs:c,source:i,subscribe:_},l.useEffect((function(){c.getSnapshot=t,c.setSnapshot=o;var e=a(i._source);if(!l_(r,e)){e=t(i._source),l_(m,e)||(o(e),e=vl(b),s.mutableReadLanes|=e&s.pendingLanes),e=s.mutableReadLanes,s.entangledLanes|=e;for(var _=s.entanglements,n=e;0t?98:t,(function(){e(!0)})),Ns(97<\/script>",e=e.removeChild(e.firstChild)):"string"===typeof _.is?e=d.createElement(t,{is:_.is}):(e=d.createElement(t),"select"===t&&(d=e,_.multiple?d.multiple=!0:_.size&&(d.size=_.size))):e=d.createElementNS(e,t),e[G_]=i,e[Q_]=_,Yn(e,i,!1,!1),i.stateNode=e,d=Le(t,_),t){case"dialog":D_("cancel",e),D_("close",e),a=_;break;case"iframe":case"object":case"embed":D_("load",e),a=_;break;case"video":case"audio":for(a=0;aZr&&(i.flags|=64,r=!0,ar(_,!1),i.lanes=33554432)}else{if(!r)if(null!==(e=Ba(d))){if(i.flags|=64,r=!0,null!==(t=e.updateQueue)&&(i.updateQueue=t,i.flags|=4),ar(_,!0),null===_.tail&&"hidden"===_.tailMode&&!d.alternate&&!qa)return null!==(i=i.lastEffect=_.lastEffect)&&(i.nextEffect=null),null}else 2*Cs()-_.renderingStartTime>Zr&&1073741824!==t&&(i.flags|=64,r=!0,ar(_,!1),i.lanes=33554432);_.isBackwards?(d.sibling=i.child,i.child=d):(null!==(t=_.last)?t.sibling=d:i.child=d,_.last=d)}return null!==_.tail?(t=_.tail,_.rendering=t,_.tail=t.sibling,_.lastEffect=i.lastEffect,_.renderingStartTime=Cs(),t.sibling=null,i=Ia.current,ds(Ia,r?1&i|2:1&i),t):null;case 23:case 24:return xl(),null!==e&&null!==e.memoizedState!==(null!==i.memoizedState)&&"unstable-defer-without-hiding"!==_.mode&&(i.flags|=4),null}throw Error(n(156,i.tag))}function rr(e){switch(e.tag){case 1:fs(e.type)&&bs();var i=e.flags;return 4096&i?(e.flags=-4097&i|64,e):null;case 3:if(Ta(),ls(vs),ls(ms),Pa(),0!==(64&(i=e.flags)))throw Error(n(285));return e.flags=-4097&i|64,e;case 5:return Ua(e),null;case 13:return ls(Ia),4096&(i=e.flags)?(e.flags=-4097&i|64,e):null;case 19:return ls(Ia),null;case 4:return Ta(),null;case 10:return ia(e),null;case 23:case 24:return xl(),null;default:return null}}function lr(e,i){try{var t="",_=i;do{t+=Y(_),_=_.return}while(_);var s=t}catch(a){s="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:i,stack:s}}function dr(e,i){try{console.error(i.value)}catch(t){setTimeout((function(){throw t}))}}Yn=function(e,i){for(var t=i.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===i)break;for(;null===t.sibling;){if(null===t.return||t.return===i)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Pn=function(){},jn=function(e,i,t,_){var a=e.memoizedProps;if(a!==_){e=i.stateNode,Va(Sa.current);var n,r=null;switch(t){case"input":a=$(e,a),_=$(e,_),r=[];break;case"option":a=ae(e,a),_=ae(e,_),r=[];break;case"select":a=s({},a,{value:void 0}),_=s({},_,{value:void 0}),r=[];break;case"textarea":a=re(e,a),_=re(e,_),r=[];break;default:"function"!==typeof a.onClick&&"function"===typeof _.onClick&&(e.onclick=F_)}for(m in ze(t,_),t=null,a)if(!_.hasOwnProperty(m)&&a.hasOwnProperty(m)&&null!=a[m])if("style"===m){var d=a[m];for(n in d)d.hasOwnProperty(n)&&(t||(t={}),t[n]="")}else"dangerouslySetInnerHTML"!==m&&"children"!==m&&"suppressContentEditableWarning"!==m&&"suppressHydrationWarning"!==m&&"autoFocus"!==m&&(l.hasOwnProperty(m)?r||(r=[]):(r=r||[]).push(m,null));for(m in _){var o=_[m];if(d=null!=a?a[m]:void 0,_.hasOwnProperty(m)&&o!==d&&(null!=o||null!=d))if("style"===m)if(d){for(n in d)!d.hasOwnProperty(n)||o&&o.hasOwnProperty(n)||(t||(t={}),t[n]="");for(n in o)o.hasOwnProperty(n)&&d[n]!==o[n]&&(t||(t={}),t[n]=o[n])}else t||(r||(r=[]),r.push(m,t)),t=o;else"dangerouslySetInnerHTML"===m?(o=o?o.__html:void 0,d=d?d.__html:void 0,null!=o&&d!==o&&(r=r||[]).push(m,o)):"children"===m?"string"!==typeof o&&"number"!==typeof o||(r=r||[]).push(m,""+o):"suppressContentEditableWarning"!==m&&"suppressHydrationWarning"!==m&&(l.hasOwnProperty(m)?(null!=o&&"onScroll"===m&&D_("scroll",e),r||d===o||(r=[])):"object"===typeof o&&null!==o&&o.$$typeof===I?o.toString():(r=r||[]).push(m,o))}t&&(r=r||[]).push("style",t);var m=r;(i.updateQueue=m)&&(i.flags|=4)}},Kn=function(e,i,t,_){t!==_&&(i.flags|=4)};var or="function"===typeof WeakMap?WeakMap:Map;function mr(e,i,t){(t=la(-1,t)).tag=3,t.payload={element:null};var _=i.value;return t.callback=function(){Kr||(Kr=!0,Gr=_),dr(0,i)},t}function vr(e,i,t){(t=la(-1,t)).tag=3;var _=e.type.getDerivedStateFromError;if("function"===typeof _){var s=i.value;t.payload=function(){return dr(0,i),_(s)}}var a=e.stateNode;return null!==a&&"function"===typeof a.componentDidCatch&&(t.callback=function(){"function"!==typeof _&&(null===Qr?Qr=new Set([this]):Qr.add(this),dr(0,i));var e=i.stack;this.componentDidCatch(i.value,{componentStack:null!==e?e:""})}),t}var cr="function"===typeof WeakSet?WeakSet:Set;function ur(e){var i=e.ref;if(null!==i)if("function"===typeof i)try{i(null)}catch(t){ql(e,t)}else i.current=null}function fr(e,i){switch(i.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&i.flags&&null!==e){var t=e.memoizedProps,_=e.memoizedState;i=(e=i.stateNode).getSnapshotBeforeUpdate(i.elementType===i.type?t:Ks(i.type,t),_),e.__reactInternalSnapshotBeforeUpdate=i}return;case 3:return void(256&i.flags&&Z_(i.stateNode.containerInfo))}throw Error(n(163))}function br(e,i,t){switch(t.tag){case 0:case 11:case 15:case 22:if(null!==(i=null!==(i=t.updateQueue)?i.lastEffect:null)){e=i=i.next;do{if(3===(3&e.tag)){var _=e.create;e.destroy=_()}e=e.next}while(e!==i)}if(null!==(i=null!==(i=t.updateQueue)?i.lastEffect:null)){e=i=i.next;do{var s=e;_=s.next,0!==(4&(s=s.tag))&&0!==(1&s)&&(Bl(t,e),Il(t,e)),e=_}while(e!==i)}return;case 1:return e=t.stateNode,4&t.flags&&(null===i?e.componentDidMount():(_=t.elementType===t.type?i.memoizedProps:Ks(t.type,i.memoizedProps),e.componentDidUpdate(_,i.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(i=t.updateQueue)&&va(t,i,e));case 3:if(null!==(i=t.updateQueue)){if(e=null,null!==t.child)switch(t.child.tag){case 5:case 1:e=t.child.stateNode}va(t,i,e)}return;case 5:return e=t.stateNode,void(null===i&&4&t.flags&&C_(t.type,t.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===t.memoizedState&&(t=t.alternate,null!==t&&(t=t.memoizedState,null!==t&&(t=t.dehydrated,null!==t&&hi(t)))))}throw Error(n(163))}function pr(e,i){for(var t=e;;){if(5===t.tag){var _=t.stateNode;if(i)"function"===typeof(_=_.style).setProperty?_.setProperty("display","none","important"):_.display="none";else{_=t.stateNode;var s=t.memoizedProps.style;s=void 0!==s&&null!==s&&s.hasOwnProperty("display")?s.display:null,_.style.display=we("display",s)}}else if(6===t.tag)t.stateNode.nodeValue=i?"":t.memoizedProps;else if((23!==t.tag&&24!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return}t.sibling.return=t.return,t=t.sibling}}function gr(e,i){if(xs&&"function"===typeof xs.onCommitFiberUnmount)try{xs.onCommitFiberUnmount(hs,i)}catch(a){}switch(i.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=i.updateQueue)&&null!==(e=e.lastEffect)){var t=e=e.next;do{var _=t,s=_.destroy;if(_=_.tag,void 0!==s)if(0!==(4&_))Bl(i,t);else{_=i;try{s()}catch(a){ql(_,a)}}t=t.next}while(t!==e)}break;case 1:if(ur(i),"function"===typeof(e=i.stateNode).componentWillUnmount)try{e.props=i.memoizedProps,e.state=i.memoizedState,e.componentWillUnmount()}catch(a){ql(i,a)}break;case 5:ur(i);break;case 4:Lr(e,i)}}function Er(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function wr(e){return 5===e.tag||3===e.tag||4===e.tag}function hr(e){e:{for(var i=e.return;null!==i;){if(wr(i))break e;i=i.return}throw Error(n(160))}var t=i;switch(i=t.stateNode,t.tag){case 5:var _=!1;break;case 3:case 4:i=i.containerInfo,_=!0;break;default:throw Error(n(161))}16&t.flags&&(pe(i,""),t.flags&=-17);e:i:for(t=e;;){for(;null===t.sibling;){if(null===t.return||wr(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.flags)continue i;if(null===t.child||4===t.tag)continue i;t.child.return=t,t=t.child}if(!(2&t.flags)){t=t.stateNode;break e}}_?xr(e,t,i):zr(e,t,i)}function xr(e,i,t){var _=e.tag,s=5===_||6===_;if(s)e=s?e.stateNode:e.stateNode.instance,i?8===t.nodeType?t.parentNode.insertBefore(e,i):t.insertBefore(e,i):(8===t.nodeType?(i=t.parentNode).insertBefore(e,t):(i=t).appendChild(e),null!==(t=t._reactRootContainer)&&void 0!==t||null!==i.onclick||(i.onclick=F_));else if(4!==_&&null!==(e=e.child))for(xr(e,i,t),e=e.sibling;null!==e;)xr(e,i,t),e=e.sibling}function zr(e,i,t){var _=e.tag,s=5===_||6===_;if(s)e=s?e.stateNode:e.stateNode.instance,i?t.insertBefore(e,i):t.appendChild(e);else if(4!==_&&null!==(e=e.child))for(zr(e,i,t),e=e.sibling;null!==e;)zr(e,i,t),e=e.sibling}function Lr(e,i){for(var t,_,s=i,a=!1;;){if(!a){a=s.return;e:for(;;){if(null===a)throw Error(n(160));switch(t=a.stateNode,a.tag){case 5:_=!1;break e;case 3:case 4:t=t.containerInfo,_=!0;break e}a=a.return}a=!0}if(5===s.tag||6===s.tag){e:for(var r=e,l=s,d=l;;)if(gr(r,d),null!==d.child&&4!==d.tag)d.child.return=d,d=d.child;else{if(d===l)break e;for(;null===d.sibling;){if(null===d.return||d.return===l)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}_?(r=t,l=s.stateNode,8===r.nodeType?r.parentNode.removeChild(l):r.removeChild(l)):t.removeChild(s.stateNode)}else if(4===s.tag){if(null!==s.child){t=s.stateNode.containerInfo,_=!0,s.child.return=s,s=s.child;continue}}else if(gr(e,s),null!==s.child){s.child.return=s,s=s.child;continue}if(s===i)break;for(;null===s.sibling;){if(null===s.return||s.return===i)return;4===(s=s.return).tag&&(a=!1)}s.sibling.return=s.return,s=s.sibling}}function Mr(e,i){switch(i.tag){case 0:case 11:case 14:case 15:case 22:var t=i.updateQueue;if(null!==(t=null!==t?t.lastEffect:null)){var _=t=t.next;do{3===(3&_.tag)&&(e=_.destroy,_.destroy=void 0,void 0!==e&&e()),_=_.next}while(_!==t)}return;case 1:case 12:case 17:return;case 5:if(null!=(t=i.stateNode)){_=i.memoizedProps;var s=null!==e?e.memoizedProps:_;e=i.type;var a=i.updateQueue;if(i.updateQueue=null,null!==a){for(t[Q_]=_,"input"===e&&"radio"===_.type&&null!=_.name&&ie(t,_),Le(e,s),i=Le(e,_),s=0;ss&&(s=r),t&=~a}if(t=s,10<(t=(120>(t=Cs()-t)?120:480>t?480:1080>t?1080:1920>t?1920:3e3>t?3e3:4320>t?4320:1960*Dr(t/1960))-t)){e.timeoutHandle=k_(Al.bind(null,e),t);break}Al(e);break;default:throw Error(n(329))}}return fl(e,Cs()),e.callbackNode===i?bl.bind(null,e):null}function pl(e,i){for(i&=~Hr,i&=~Cr,e.suspendedLanes|=i,e.pingedLanes&=~i,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Or&&(Or=2),l=lr(l,r),v=n;do{switch(v.tag){case 3:a=l,v.flags|=4096,i&=-i,v.lanes|=i,oa(v,mr(0,a,i));break e;case 1:a=l;var h=v.type,x=v.stateNode;if(0===(64&v.flags)&&("function"===typeof h.getDerivedStateFromError||null!==x&&"function"===typeof x.componentDidCatch&&(null===Qr||!Qr.has(x)))){v.flags|=4096,i&=-i,v.lanes|=i,oa(v,vr(v,a,i));break e}}v=v.return}while(null!==v)}Vl(t)}catch(z){i=z,Wr===t&&null!==t&&(Wr=t=t.return);continue}break}}function Ml(){var e=yr.current;return yr.current=Vn,null===e?Vn:e}function Rl(e,i){var t=Ar;Ar|=16;var _=Ml();for(Tr===e&&Ur===i||zl(e,i);;)try{Sl();break}catch(s){Ll(e,s)}if(ea(),Ar=t,yr.current=_,null!==Wr)throw Error(n(261));return Tr=null,Ur=0,Or}function Sl(){for(;null!==Wr;)yl(Wr)}function Dl(){for(;null!==Wr&&!Rs();)yl(Wr)}function yl(e){var i=Pr(e.alternate,e,Ir);e.memoizedProps=e.pendingProps,null===i?Vl(e):Wr=i,Vr.current=null}function Vl(e){var i=e;do{var t=i.alternate;if(e=i.return,0===(2048&i.flags)){if(null!==(t=nr(t,i,Ir)))return void(Wr=t);if(24!==(t=i).tag&&23!==t.tag||null===t.memoizedState||0!==(1073741824&Ir)||0===(4&t.mode)){for(var _=0,s=t.child;null!==s;)_|=s.lanes|s.childLanes,s=s.sibling;t.childLanes=_}null!==e&&0===(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=i.firstEffect),null!==i.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=i.firstEffect),e.lastEffect=i.lastEffect),1r&&(l=r,r=x,x=l),l=v_(E,x),a=v_(E,r),l&&a&&(1!==h.rangeCount||h.anchorNode!==l.node||h.anchorOffset!==l.offset||h.focusNode!==a.node||h.focusOffset!==a.offset)&&((w=w.createRange()).setStart(l.node,l.offset),h.removeAllRanges(),x>r?(h.addRange(w),h.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),h.addRange(w))))),w=[];for(h=E;h=h.parentNode;)1===h.nodeType&&w.push({element:h,left:h.scrollLeft,top:h.scrollTop});for("function"===typeof E.focus&&E.focus(),E=0;ECs()-Nr?zl(e,0):Hr|=t),fl(e,i)}function Cl(e,i){var t=e.stateNode;null!==t&&t.delete(i),0===(i=0)&&(0===(2&(i=e.mode))?i=1:0===(4&i)?i=99===Hs()?1:2:(0===rl&&(rl=qr),0===(i=Xi(62914560&~rl))&&(i=4194304))),t=ml(),null!==(e=ul(e,i))&&(Hi(e,i,t),fl(e,t))}function Hl(e,i,t,_){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=i,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=_,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function kl(e,i,t,_){return new Hl(e,i,t,_)}function Nl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Zl(e,i){var t=e.alternate;return null===t?((t=kl(e.tag,i,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=i,t.type=e.type,t.flags=0,t.nextEffect=null,t.firstEffect=null,t.lastEffect=null),t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,i=e.dependencies,t.dependencies=null===i?null:{lanes:i.lanes,firstContext:i.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Yl(e,i,t,_,s,a){var r=2;if(_=e,"function"===typeof e)Nl(e)&&(r=1);else if("string"===typeof e)r=5;else e:switch(e){case L:return Pl(t.children,s,a,i);case B:r=8,s|=16;break;case M:r=8,s|=1;break;case R:return(e=kl(12,t,i,8|s)).elementType=R,e.type=R,e.lanes=a,e;case V:return(e=kl(13,t,i,s)).type=V,e.elementType=V,e.lanes=a,e;case A:return(e=kl(19,t,i,s)).elementType=A,e.lanes=a,e;case O:return jl(t,s,a,i);case F:return(e=kl(24,t,i,s)).elementType=F,e.lanes=a,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case S:r=10;break e;case D:r=9;break e;case y:r=11;break e;case T:r=14;break e;case W:r=16,_=null;break e;case U:r=22;break e}throw Error(n(130,null==e?e:typeof e,""))}return(i=kl(r,t,i,s)).elementType=e,i.type=_,i.lanes=a,i}function Pl(e,i,t,_){return(e=kl(7,e,_,i)).lanes=t,e}function jl(e,i,t,_){return(e=kl(23,e,_,i)).elementType=O,e.lanes=t,e}function Kl(e,i,t){return(e=kl(6,e,null,i)).lanes=t,e}function Gl(e,i,t){return(i=kl(4,null!==e.children?e.children:[],e.key,i)).lanes=t,i.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},i}function Ql(e,i,t){this.tag=i,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ci(0),this.expirationTimes=Ci(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ci(0),this.mutableSourceEagerHydrationData=null}function Jl(e,i,t,_){var s=i.current,a=ml(),r=vl(s);e:if(t){i:{if(Ke(t=t._reactInternals)!==t||1!==t.tag)throw Error(n(170));var l=t;do{switch(l.tag){case 3:l=l.stateNode.context;break i;case 1:if(fs(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break i}}l=l.return}while(null!==l);throw Error(n(171))}if(1===t.tag){var d=t.type;if(fs(d)){t=gs(t,d,l);break e}}t=l}else t=os;return null===i.context?i.context=t:i.pendingContext=t,(i=la(a,r)).payload={element:e},null!==(_=void 0===_?null:_)&&(i.callback=_),da(s,i),cl(s,r,a),r}function $l(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function ed(e,i){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t=E},a=function(){},i.unstable_forceFrameRate=function(e){0>e||125>>1,s=e[_];if(!(void 0!==s&&0M(n,t))void 0!==l&&0>M(l,n)?(e[_]=l,e[r]=t,_=r):(e[_]=n,e[a]=t,_=a);else{if(!(void 0!==l&&0>M(l,t)))break e;e[_]=l,e[r]=t,_=r}}}return i}return null}function M(e,i){var t=e.sortIndex-i.sortIndex;return 0!==t?t:e.id-i.id}var R=[],S=[],D=1,y=null,V=3,A=!1,T=!1,W=!1;function U(e){for(var i=z(S);null!==i;){if(null===i.callback)L(S);else{if(!(i.startTime<=e))break;L(S),i.sortIndex=i.expirationTime,x(R,i)}i=z(S)}}function I(e){if(W=!1,U(e),!T)if(null!==z(R))T=!0,t(B);else{var i=z(S);null!==i&&_(I,i.startTime-e)}}function B(e,t){T=!1,W&&(W=!1,s()),A=!0;var a=V;try{for(U(t),y=z(R);null!==y&&(!(y.expirationTime>t)||e&&!i.unstable_shouldYield());){var n=y.callback;if("function"===typeof n){y.callback=null,V=y.priorityLevel;var r=n(y.expirationTime<=t);t=i.unstable_now(),"function"===typeof r?y.callback=r:y===z(R)&&L(R),U(t)}else L(R);y=z(R)}if(null!==y)var l=!0;else{var d=z(S);null!==d&&_(I,d.startTime-t),l=!1}return l}finally{y=null,V=a,A=!1}}var O=a;i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(e){e.callback=null},i.unstable_continueExecution=function(){T||A||(T=!0,t(B))},i.unstable_getCurrentPriorityLevel=function(){return V},i.unstable_getFirstCallbackNode=function(){return z(R)},i.unstable_next=function(e){switch(V){case 1:case 2:case 3:var i=3;break;default:i=V}var t=V;V=i;try{return e()}finally{V=t}},i.unstable_pauseExecution=function(){},i.unstable_requestPaint=O,i.unstable_runWithPriority=function(e,i){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=V;V=e;try{return i()}finally{V=t}},i.unstable_scheduleCallback=function(e,a,n){var r=i.unstable_now();switch("object"===typeof n&&null!==n?n="number"===typeof(n=n.delay)&&0r?(e.sortIndex=n,x(S,e),null===z(R)&&e===z(S)&&(W?s():W=!0,_(I,n-r))):(e.sortIndex=l,x(R,e),T||A||(T=!0,t(B))),e},i.unstable_wrapCallback=function(e){var i=V;return function(){var t=V;V=i;try{return e.apply(this,arguments)}finally{V=t}}}},296:function(e,i,t){"use strict";e.exports=t(813)},458:function(e){e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var i=document.activeElement,t=[],_=0;_e.length)&&(i=e.length);for(var t=0,_=new Array(i);t=e.length?{done:!0}:{done:!1,value:e[_++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,n=!0,r=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return n=e.done,e},e:function(e){r=!0,a=e},f:function(){try{n||null==t.return||t.return()}finally{if(r)throw a}}}}(e.flags);try{for(t.s();!(i=t.n()).done;){var _=b(i.value,2),s=_[0],a=_[1];this.flags.has(s)||this.flags.set(s,a)}}catch(n){t.e(n)}finally{t.f()}}},{key:"enabled",value:function(e){return this.checkForFlag(e),this.flags.get(e)}}],t&&f(i.prototype,t),_&&f(i,_),Object.defineProperty(i,"prototype",{writable:!1}),e}(),w=z(),h=0;h=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function O(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function F(e){var i=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,_=U(e);if(i){var s=U(this).constructor;t=Reflect.construct(_,arguments,s)}else t=_.apply(this,arguments);return function(e,i){if(i&&("object"===typeof i||"function"===typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return O(e)}(this,t)}}function q(e,i){return function(e){if(Array.isArray(e))return e}(e)||function(e,i){var t=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==t)return;var _,s,a=[],n=!0,r=!1;try{for(t=t.call(e);!(n=(_=t.next()).done)&&(a.push(_.value),!i||a.length!==i);n=!0);}catch(l){r=!0,s=l}finally{try{n||null==t.return||t.return()}finally{if(r)throw s}}return a}(e,i)||X(e,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(e,i){if(e){if("string"===typeof e)return C(e,i);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?C(e,i):void 0}}function C(e,i){(null==i||i>e.length)&&(i=e.length);for(var t=0,_=new Array(i);t=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}K.propTypes={align:P().oneOf(["start","end"]),children:P().node,className:P().string,disabled:P().bool,size:L("enable-v11-release")?P().oneOf(["sm","md","lg"]):P().oneOf(["sm","md","lg","xl"])};var ee=["width","height","viewBox"],ie=["tabindex"],te={focusable:"false",preserveAspectRatio:"xMidYMid meet"};function _e(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.width,t=e.height,_=e.viewBox,s=void 0===_?"0 0 ".concat(i," ").concat(t):_,a=$(e,ee),n=a.tabindex,r=$(a,ie),l=Q(Q(Q({},te),r),{},{width:i,height:t,viewBox:s});return l["aria-label"]||l["aria-labelledby"]||l.title?(l.role="img",void 0!==n&&null!==n&&(l.focusable="true",l.tabindex=n)):l["aria-hidden"]=!0,l}function se(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(e);i&&(_=_.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),t.push.apply(t,_)}return t}function ae(e){for(var i=1;i=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var le=["className","children","tabIndex"],de=["tabindex"],oe=i.forwardRef((function(e,t){var _=e.className,s=e.children,a=e.tabIndex,n=_e(ae(ae({},re(e,le)),{},{tabindex:a})),r=n.tabindex,l=re(n,de);return _&&(l.className=_),void 0!==r&&null!==r&&(l.tabIndex=r),t&&(l.ref=t),i.createElement("svg",l,s)}));oe.displayName="Icon",oe.propTypes={"aria-hidden":P().string,"aria-label":P().string,"aria-labelledby":P().string,children:P().node,className:P().string,height:P().oneOfType([P().number,P().string]),preserveAspectRatio:P().string,tabIndex:P().string,viewBox:P().string,width:P().oneOfType([P().number,P().string]),xmlns:P().string},oe.defaultProps={xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid meet"};var me,ve,ce,ue,fe,be,pe,ge,Ee,we,he,xe,ze,Le,Me,Re,Se,De,ye,Ve,Ae,Te,We,Ue,Ie,Be,Oe,Fe,qe,Xe,Ce,He,ke,Ne,Ze,Ye,Pe,je,Ke,Ge,Qe,Je,$e,ei,ii,ti,_i,si,ai,ni,ri,li,di,oi,mi,vi,ci,ui,fi,bi,pi,gi,Ei,wi,hi,xi,zi,Li,Mi,Ri,Si,Di,yi,Vi,Ai,Ti,Wi,Ui,Ii,Bi,Oi,Fi,qi,Xi,Ci,Hi,ki,Ni,Zi,Yi,Pi,ji,Ki,Gi,Qi,Ji,$i,et,it,tt,_t,st,at,nt,rt,lt,dt,ot,mt,vt,ct,ut,ft,bt,pt,gt,Et,wt,ht,xt,zt,Lt,Mt,Rt,St,Dt,yt,Vt,At,Tt,Wt,Ut,It,Bt,Ot,Ft,qt,Xt,Ct,Ht,kt,Nt,Zt,Yt,Pt,jt,Kt,Gt,Qt,Jt,$t,e_,i_,t_,__,s_,a_,n_,r_,l_,d_,o_,m_,v_,c_,u_,f_,b_,p_,g_,E_,w_,h_,x_,z_,L_,M_,R_,S_,D_,y_,V_,A_,T_,W_,U_,I_,B_,O_,F_,q_,X_,C_,H_,k_,N_,Z_,Y_,P_,j_,K_,G_,Q_,J_,$_,es,is,ts,_s,ss,as,ns,rs,ls,ds,os,ms,vs,cs,us,fs,bs,ps,gs,Es,ws,hs,xs,zs,Ls,Ms,Rs,Ss,Ds,ys,Vs,As,Ts,Ws,Us,Is,Bs,Os,Fs,qs,Xs,Cs,Hs,ks,Ns,Zs,Ys,Ps,js,Ks,Gs,Qs,Js,$s,ea,ia,ta,_a,sa,aa,na,ra,la,da={size:P().oneOfType([P().number,P().string])},oa=["children","size"],ma=["children","size"],va=["children","size"],ca=["children","size"],ua=["children","size"],fa=["children","size"],ba=["children","size"],pa=["children","size"],ga=["children","size"],Ea=["children","size"],wa=["children","size"],ha=["children","size"],xa=["children","size"],za=["children","size"],La=["children","size"],Ma=["children","size"],Ra=["children","size"],Sa=["children","size"],Da=["children","size"],ya=["children","size"],Va=["children","size"],Aa=["children","size"],Ta=["children","size"],Wa=["children","size"],Ua=["children","size"],Ia=["children","size"],Ba=["children","size"],Oa=["children","size"],Fa=["children","size"],qa=["children","size"],Xa=["children","size"],Ca=["children","size"],Ha=["children","size"],ka=["children","size"],Na=["children","size"],Za=["children","size"],Ya=["children","size"],Pa=["children","size"],ja=["children","size"],Ka=["children","size"],Ga=["children","size"],Qa=["children","size"],Ja=["children","size"],$a=["children","size"],en=["children","size"],tn=["children","size"],_n=["children","size"],sn=["children","size"],an=["children","size"],nn=["children","size"],rn=["children","size"],ln=["children","size"],dn=["children","size"],on=["children","size"],mn=["children","size"],vn=["children","size"],cn=["children","size"],un=["children","size"],fn=["children","size"],bn=["children","size"],pn=["children","size"],gn=["children","size"],En=["children","size"],wn=["children","size"],hn=["children","size"],xn=["children","size"],zn=["children","size"],Ln=["children","size"],Mn=["children","size"],Rn=["children","size"],Sn=["children","size"],Dn=["children","size"],yn=["children","size"],Vn=["children","size"],An=["children","size"],Tn=["children","size"],Wn=["children","size"],Un=["children","size"],In=["children","size"],Bn=["children","size"],On=["children","size"],Fn=["children","size"],qn=["children","size"],Xn=["children","size"],Cn=["children","size"],Hn=["children","size"],kn=["children","size"],Nn=["children","size"],Zn=["children","size"],Yn=["children","size"],Pn=["children","size"],jn=["children","size"],Kn=["children","size"],Gn=["children","size"],Qn=["children","size"],Jn=["children","size"],$n=["children","size"],er=["children","size"],ir=["children","size"],tr=["children","size"],_r=["children","size"],sr=["children","size"],ar=["children","size"],nr=["children","size"],rr=["children","size"],lr=["children","size"],dr=["children","size"],or=["children","size"],mr=["children","size"],vr=["children","size"],cr=["children","size"],ur=["children","size"],fr=["children","size"],br=["children","size"],pr=["children","size"],gr=["children","size"],Er=["children","size"],wr=["children","size"],hr=["children","size"],xr=["children","size"],zr=["children","size"],Lr=["children","size"],Mr=["children","size"],Rr=["children","size"],Sr=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,oa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),me||(me=i.createElement("path",{d:"M28 24H14V16H28zM16 22H26V18H16zM26 12H8V4H26zM10 10H24V6H10z"})),ve||(ve=i.createElement("path",{d:"M30,30H4a2.0023,2.0023,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ma);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ce||(ce=i.createElement("path",{d:"M4,28V26H26V16H4V14H18V4H4V2H2V28a2,2,0,0,0,2,2H30V28ZM24,18v6H4V22H20V20H4V18ZM16,6v6H4V10h8V8H4V6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,va);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ue||(ue=i.createElement("path",{d:"M4,28V25H26V17H4V13H18V5H4V2H2V28a2,2,0,0,0,2,2H30V28Zm20-5H14V19H24ZM16,11H10V7h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ca);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),fe||(fe=i.createElement("path",{d:"M28 17H30V25H28zM20 5H22V13H20z"})),be||(be=i.createElement("path",{d:"M4,2H2V28a2,2,0,0,0,2,2H30V28H4V25H26V17H4V13H18V5H4ZM24,19v4H4V19ZM16,7v4H4V7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ua);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pe||(pe=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),ge||(ge=i.createElement("path",{d:"M10 16a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4 4 4 0 00-4-4zM21 6a4 4 0 11-4 4 4 4 0 014-4m0-2a6 6 0 106 6 6 6 0 00-6-6zM24.5 21A1.5 1.5 0 1123 22.5 1.5 1.5 0 0124.5 21m0-2A3.5 3.5 0 1028 22.5 3.5 3.5 0 0024.5 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ee||(Ee=i.createElement("path",{d:"M27.5322,17.1724A8.99,8.99,0,1,0,13.6074,5.88,5.9969,5.9969,0,1,0,5.051,13.2217a6.9967,6.9967,0,1,0,7.9942,11.4844A5.9981,5.9981,0,0,0,25,24c0-.1216-.011-.24-.0181-.3594a3.4873,3.4873,0,1,0,2.55-6.4682ZM21,4a7,7,0,1,1-7,7A7.0078,7.0078,0,0,1,21,4ZM8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4ZM19,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,19,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ba);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),we||(we=i.createElement("path",{d:"M30 22H16V21H14v1H2v6H14v1h2V28H30zM4 26V24H14v2zm24 0H16V24H28zM30 13H24V12H22v1H2v6H22v1h2V19h6zM4 17V15H22v2zm24 0H24V15h4zM30 4H10V3H8V4H2v6H8v1h2V10H30zM4 8V6H8V8zM28 8H10V6H28z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),he||(he=i.createElement("path",{d:"M26 10H24V6H22v4H20V22h2v4h2V22h2zM24 20H22V12h2zM14 8H12V4H10V8H8V18h2v4h2V18h2zm-2 8H10V10h2z"})),xe||(xe=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ga);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ze||(ze=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),Le||(Le=i.createElement("path",{d:"M10 16H12V26H10zM7 22H9V26H7zM26 8H28V26H26zM23 14H25V26H23z"})),Me||(Me=i.createElement("path",{d:"M15 12H17V26H15z",transform:"rotate(-180 16 19)"})),Re||(Re=i.createElement("path",{d:"M18 18H20V26H18z",transform:"rotate(-180 19 22)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ea);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Se||(Se=i.createElement("path",{d:"M27,28V6H19V28H15V14H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V16h4Zm12,0H21V8h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),De||(De=i.createElement("path",{d:"M28 22H20V4h8zm-6-2h4V6H22zM16 24H8V10h8zm-6-2h4V12H10z"})),ye||(ye=i.createElement("path",{d:"M30,30H4a2.0021,2.0021,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ha);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ve||(Ve=i.createElement("path",{d:"M27 28V6H19V28H15V14H7V28H4V2H2V28a2 2 0 002 2H30V28zM13 28H9V16h4zm12 0H21V8h4zM19 2H27V4H19z"})),Ae||(Ae=i.createElement("path",{d:"M7 10H15V12H7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Te||(Te=i.createElement("path",{d:"M27,28V16H19V28H15V12H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V14h4Zm12,0H21V18h4Z"})),We||(We=i.createElement("path",{d:"M22.7856,14a1.9877,1.9877,0,0,1-1.1787-.3865L11.2041,5.987,8.2419,10,6.6374,8.8065l2.9812-4a1.9978,1.9978,0,0,1,2.749-.446l10.4214,7.64,3.6045-4.8613L28,8.3306l-3.6045,4.8611A2.0014,2.0014,0,0,1,22.7856,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,za);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ue||(Ue=i.createElement("path",{d:"M27,28V16H19V28H15V12H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,14v6H9V14Zm12,4v6H21V18Z"})),Ie||(Ie=i.createElement("path",{d:"M22.7856,14a1.9877,1.9877,0,0,1-1.1787-.3865L11.2041,5.987,8.2419,10,6.6374,8.8065l2.9812-4a1.9978,1.9978,0,0,1,2.749-.446l10.4214,7.64,3.6045-4.8613L28,8.3306l-3.6045,4.8611A2.0014,2.0014,0,0,1,22.7856,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,La);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Be||(Be=i.createElement("path",{d:"M29.707,19.293l-3-3a.9994.9994,0,0,0-1.414,0L16,25.5859V30h4.4141l9.2929-9.293A.9994.9994,0,0,0,29.707,19.293ZM19.5859,28H18V26.4141l5-5L24.5859,23ZM26,21.5859,24.4141,20,26,18.4141,27.5859,20Z"})),Oe||(Oe=i.createElement("path",{d:"M17 15H21V17H17z",transform:"rotate(-90 19 16)"})),Fe||(Fe=i.createElement("path",{d:"M12 14H18V16H12z",transform:"rotate(-90 15 15)"})),qe||(qe=i.createElement("path",{d:"M6 12H16V14H6z",transform:"rotate(-90 11 13)"})),Xe||(Xe=i.createElement("path",{d:"M12,30H6a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,6,2H22a2.0021,2.0021,0,0,1,2,2V14H22V4H6V28h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ma);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ce||(Ce=i.createElement("path",{d:"M22,28V12H18V8h2V6H14V8h2v4H12V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM14,14h2v4H14Zm6,14H14V20h6Zm0-10H18V14h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ra);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),He||(He=i.createElement("path",{d:"M14 10V8H8v2h2v4.1836a2.983 2.983 0 000 5.6328V24H8v2h6V24H12V19.8164a2.983 2.983 0 000-5.6328V10zM26 6V4H20V6h2V8.1836a2.983 2.983 0 000 5.6328V18H20v2h6V18H24V13.8164a2.983 2.983 0 000-5.6328V6z"})),ke||(ke=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ne||(Ne=i.createElement("path",{d:"M25.672 6.207H29.915V8.206H25.672z",transform:"rotate(-45.02 27.793 7.207)"})),Ze||(Ze=i.createElement("path",{d:"M16 20.5L11 15.539 12.59 13.969 16 17.349 23.41 10 25 11.579 16 20.5z"})),Ye||(Ye=i.createElement("path",{d:"M4,28V25.4131L10.4141,19,9,17.585l-5,5V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Da);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pe||(Pe=i.createElement("path",{d:"M15 8L12 8 12 6 10 6 10 20 7 20 7 22 10 22 10 24 12 24 12 10 15 10 15 8zM27 10L24 10 24 6 22 6 22 18 19 18 19 20 22 20 22 24 24 24 24 12 27 12 27 10z"})),je||(je=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ya);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ke||(Ke=i.createElement("path",{d:"M6,16c2.9727,0,4.2324-2.251,5.3447-4.2373C12.4741,9.7441,13.45,8,16,8s3.5259,1.7441,4.6553,3.7627C21.7676,13.749,23.0273,16,26,16h4V14H26c-1.7129,0-2.4834-1.2207-3.5991-3.2144C21.2075,8.6543,19.7231,6,16,6s-5.2075,2.6543-6.4009,4.7856C8.4834,12.7793,7.7129,14,6,14H4V2H2V28a2,2,0,0,0,2,2H30V28H28V22H26v6H21.9992L22,20H20v8H16V16H14V28H9.9992L10,20H8v8H4V16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Va);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ge||(Ge=i.createElement("path",{d:"M4.67,28l6.39-12,7.3,6.49a2,2,0,0,0,1.7.47,2,2,0,0,0,1.42-1.07L27,10.9,25.18,10,19.69,21l-7.3-6.49A2,2,0,0,0,10.71,14a2,2,0,0,0-1.42,1L4,25V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Aa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qe||(Qe=i.createElement("path",{d:"M10.06,17.88A4.25,4.25,0,0,0,11,18a4,4,0,0,0,2.23-.68l3.22,2.87a3.88,3.88,0,0,0-.2,3.17A4,4,0,1,0,22.62,19l2.54-5.09a3.78,3.78,0,0,0,2.91-.53A4,4,0,1,0,23.38,13l-2.54,5.09A3.86,3.86,0,0,0,20,18a4,4,0,0,0-2.23.68l-3.22-2.87a3.88,3.88,0,0,0,.2-3.17A4,4,0,1,0,8.3,16.93L4,25V2H2V28a2,2,0,0,0,2,2H30V28H4.67ZM26,8a2,2,0,1,1-2,2A2,2,0,0,1,26,8ZM22,22a2,2,0,1,1-2-2A2,2,0,0,1,22,22ZM11,12a2,2,0,1,1-2,2A2,2,0,0,1,11,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ta);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Je||(Je=i.createElement("path",{d:"M13,15c1.4854,0,2.5544,1.4966,3.6863,3.0811C17.9983,19.918,19.4854,22,22,22c5.6709,0,7.78-10.79,8-12l-1.9678-.3584C27.55,12.2827,25.3938,20,22,20c-1.4854,0-2.5544-1.4966-3.6863-3.0811C17.0017,15.082,15.5146,13,13,13c-4.186,0-7.4448,7.4043-9,11.7617V2H2V28a2.0025,2.0025,0,0,0,2,2H30V28H5.0439C6.5544,22.8574,9.9634,15,13,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$e||($e=i.createElement("path",{d:"M27,3H5A2.0025,2.0025,0,0,0,3,5V27a2.0025,2.0025,0,0,0,2,2H27a2.0025,2.0025,0,0,0,2-2V5A2.0025,2.0025,0,0,0,27,3Zm0,7H21V5h6ZM19,8H13V5h6Zm0,2v8H13V10ZM11,22H5V12h6Zm2-2h6v7H13Zm8-8h6v4H21ZM11,5v5H5V5ZM5,24h6v3H5Zm16,3V18h6v9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ua);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ei||(ei=i.createElement("path",{d:"M8 6H10V8H8zM12 6H14V8H12zM20 6H22V8H20zM24 6H26V8H24zM28 6H30V8H28z"})),ii||(ii=i.createElement("path",{d:"M27.989,28l-.0271-.1631C26.5105,19.0742,24.0662,9.0894,18,8.0889V6H16V8.085c-6.084.978-8.533,10.9775-9.9863,19.7519L5.9866,28H4V8H6V6H4V2H2V28a2,2,0,0,0,2,2H30V28ZM8.0151,28c2.024-12.1084,4.959-18,8.9727-18s6.9487,5.8916,8.9726,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ia);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ti||(ti=i.createElement("path",{d:"M16 22H18V24H16z",transform:"rotate(-90 17 23)"})),_i||(_i=i.createElement("path",{d:"M18,28V26H16v2H4V2H2V28a2,2,0,0,0,2,2H30V28Z"})),si||(si=i.createElement("path",{d:"M26.0532,19.6787A3.44,3.44,0,0,1,23,22c-2.17,0-3.3115-3.333-4.52-6.8623-.3557-1.0386-.7239-2.1094-1.1382-3.1377H18V10H16.4221C15.2124,7.7148,13.5811,6,11,6,7.3218,6,6.1016,9.5332,6.0513,9.6836l1.8955.6377A3.44,3.44,0,0,1,11,8c2.92,0,4.2764,3.958,5.5874,7.7861.2544.7422.5105,1.4893.7813,2.2139H16v2h2.2019c1.0828,2.2886,2.4959,4,4.7981,4,3.6782,0,4.8984-3.5332,4.9487-3.6836Z"})),ai||(ai=i.createElement("path",{d:"M16 6H18V8H16z",transform:"rotate(-90 17 7)"})),ni||(ni=i.createElement("path",{d:"M16 2H18V4H16z",transform:"rotate(-90 17 3)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ba);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ri||(ri=i.createElement("path",{d:"M4,28V26H6V24H4V2H2V28a2,2,0,0,0,2,2H30V28Z"})),li||(li=i.createElement("path",{d:"M8 24H10V26H8zM12 24H14V26H12zM20 24H22V26H20zM24 24H26V26H24zM28 24H30V26H28z"})),di||(di=i.createElement("path",{d:"M27.9463,4.3281,25.9727,4C23.9487,16.1084,21.0137,22,17,22S10.0513,16.1084,8.0271,4l-1.9734.3281C7.51,13.0566,9.9631,22.93,16,23.9131V26h2V23.9131C24.0371,22.93,26.4907,13.0566,27.9463,4.3281Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),oi||(oi=i.createElement("path",{d:"M4.5859,28l7.1783-5.998L19.7578,23.94a2.021,2.021,0,0,0,1.314-.1206L28,20.5811l-.8479-1.8121-6.9163,3.229L12.2422,20.06a2.0033,2.0033,0,0,0-1.74.3838L4,25.8818V20.49l7.7642-6.4877L19.7578,15.94a2.021,2.021,0,0,0,1.314-.1206l6.9287-3.2383-.8467-1.812-6.918,3.2285L12.2422,12.06a2.0049,2.0049,0,0,0-1.74.3838L4,17.8818V12.49L11.7642,6.002,19.7578,7.94a2.021,2.021,0,0,0,1.314-.1206L28,4.5859l-.8457-1.8115L20.2358,5.998,12.2422,4.06a2.0033,2.0033,0,0,0-1.74.3838L4,9.8818V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mi||(mi=i.createElement("path",{d:"M28 22H30V30H28zM24 18H26V30H24zM20 26H22V30H20zM9 16a7 7 0 107 7A7.0078 7.0078 0 009 16zm4.8989 6H10V18.1011A5.0145 5.0145 0 0113.8989 22zM9 28a5 5 0 01-1-9.8989V22a2 2 0 002 2h3.8989A5.0081 5.0081 0 019 28zM22.5352 12l4-6H30V4H25.4648l-4 6H18V2H16V14a2 2 0 002 2H30V14H18V12z"})),vi||(vi=i.createElement("circle",{cx:"11",cy:"7",r:"1"})),ci||(ci=i.createElement("circle",{cx:"9",cy:"11",r:"1"})),ui||(ui=i.createElement("circle",{cx:"7",cy:"5",r:"1"})),fi||(fi=i.createElement("circle",{cx:"5",cy:"9",r:"1"})),bi||(bi=i.createElement("circle",{cx:"3",cy:"13",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pi||(pi=i.createElement("path",{d:"M26,14a2,2,0,0,0,2-2V6a2,2,0,0,0-2-2H20a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h2v4.1A5,5,0,0,0,18.1,22H14V20a2,2,0,0,0-2-2H10V13.9a5,5,0,1,0-2,0V18H6a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V24h4.1A5,5,0,1,0,24,18.1V14ZM6,9a3,3,0,1,1,3,3A3,3,0,0,1,6,9Zm6,17H6V20h6Zm14-3a3,3,0,1,1-3-3A3,3,0,0,1,26,23ZM20,6h6v6H20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gi||(gi=i.createElement("path",{d:"M28,2V5.3071l-6,2.25V2H20V7.5229l-8-3.2V2H10V4.4458l-6,3.75V2H2V30H4V27.6182l6-3V30h2V24.3442l8,2.4V30h2V26.5542l6-3.75V30h2V2Zm0,5.4429V12.5L22,17V9.6929ZM20,9.6768v7.5571l-8-4.8V6.4771ZM10,6.8042v5.7417l-6,5.25V10.5542ZM4,25.3818V20.4541l6-5.25v7.1777Zm8-3.1259v-7.49l8,4.8v5.0894Zm10,1.94V19.5L28,15v5.4458Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ca);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ei||(Ei=i.createElement("path",{d:"M16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4ZM26,15H17V6.05A10,10,0,0,1,26,15ZM15.42,26A10,10,0,0,1,15,6.05v9a2,2,0,0,0,2,2h9A10,10,0,0,1,15.42,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ha);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wi||(wi=i.createElement("path",{d:"M30,30H4a2.0023,2.0023,0,0,1-2-2V2H4V28H30Z"})),hi||(hi=i.createElement("circle",{cx:"9",cy:"6",r:"3"})),xi||(xi=i.createElement("circle",{cx:"9",cy:"22",r:"3"})),zi||(zi=i.createElement("circle",{cx:"18",cy:"14",r:"3"})),Li||(Li=i.createElement("path",{d:"M9,17a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,9,17Zm0-4a1,1,0,1,0,1,1A1.001,1.001,0,0,0,9,13Z"})),Mi||(Mi=i.createElement("circle",{cx:"27",cy:"6",r:"3"})),Ri||(Ri=i.createElement("circle",{cx:"27",cy:"22",r:"3"})),Si||(Si=i.createElement("path",{d:"M27 17a3 3 0 113-3A3.0033 3.0033 0 0127 17zm0-4a1 1 0 101 1A1.001 1.001 0 0027 13zM18 26a3 3 0 113-3A3.0033 3.0033 0 0118 26zm0-4a1 1 0 101 1A1.001 1.001 0 0018 22zM18 8a3 3 0 113-3A3.0033 3.0033 0 0118 8zm0-4a1 1 0 101 1A1.001 1.001 0 0018 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ka);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Di||(Di=i.createElement("path",{d:"M30,22H17V20h9V14H17V12h5V6H17V2H15V6H10v6h5v2H6v6h9v2H2v6H15v2h2V28H30ZM20,8v2H17V8Zm-8,2V8h3v2Zm12,6v2H17V16ZM8,18V16h7v2ZM4,26V24H15v2Zm24,0H17V24H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Na);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yi||(yi=i.createElement("path",{d:"M16,2,2,13,8,30H24l6-17Zm2.5818,19.2651-5.9861,1.3306-1.4226-7.8252,4.91-4.209,5.4416,4.0816Zm.1977,2.0054L21.3264,28H10.6736l1.7912-3.3267ZM9.59,13.4937,5.74,12.605,15,5.3291V8.8569ZM17,8.75V5.3291l9.26,7.2759-3.15.727ZM4.6143,14.3979l4.6535,1.0738,1.4844,8.164-1.738,3.2281ZM22.9858,26.8638l-2.5766-4.7852,3.0063-6.7646,3.97-.9161Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Za);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vi||(Vi=i.createElement("path",{d:"M16,30A14.0158,14.0158,0,0,1,2,16H4A12,12,0,1,0,16,4V2a14,14,0,0,1,0,28Z"})),Ai||(Ai=i.createElement("path",{d:"M16,26A10.0115,10.0115,0,0,1,6,16H8a8,8,0,1,0,8-8V6a10,10,0,0,1,0,20Z"})),Ti||(Ti=i.createElement("path",{d:"M16,22a6.0069,6.0069,0,0,1-6-6h2a4,4,0,1,0,4-4V10a6,6,0,0,1,0,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ya);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wi||(Wi=i.createElement("path",{d:"M26,6a3.9963,3.9963,0,0,0-3.8579,3H17.9305A7.9964,7.9964,0,1,0,9,17.9307v4.2114a4,4,0,1,0,2,0V17.9307a7.951,7.951,0,0,0,3.8976-1.6192l3.6693,3.67A3.9529,3.9529,0,0,0,18,22a4,4,0,1,0,4-4,3.9521,3.9521,0,0,0-2.019.5669l-3.6694-3.6694A7.9493,7.9493,0,0,0,17.9305,11h4.2116A3.9934,3.9934,0,1,0,26,6ZM12,26a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,12,26ZM10,16a6,6,0,1,1,6-6A6.0066,6.0066,0,0,1,10,16Zm14,6a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,24,22Zm2-10a2,2,0,1,1,2-2A2.0023,2.0023,0,0,1,26,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ui||(Ui=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14.0158,14.0158,0,0,0,16,2ZM27.9493,15.001H21.91a5.9825,5.9825,0,0,0-9.3806-3.8853l-4.27-4.27a11.9783,11.9783,0,0,1,19.69,8.1548ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20ZM4,16A11.937,11.937,0,0,1,6.8455,8.26l4.27,4.2695A5.9836,5.9836,0,0,0,15,21.9106v6.04A12.0105,12.0105,0,0,1,4,16ZM17,27.95v-6.04A6.0069,6.0069,0,0,0,21.91,17h6.04A12.0082,12.0082,0,0,1,17,27.95Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ja);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ii||(Ii=i.createElement("path",{d:"M12.4326,20.0171l8.0376,4.68a1.958,1.958,0,0,0,1.0508.3012,2.2412,2.2412,0,0,0,.4888-.0556l7.2532-1.9769A1,1,0,0,0,30,22.0007V7.996A1,1,0,0,0,28.74,7.0305L21.5034,8.9829l-8.0371-4.68a1.9917,1.9917,0,0,0-1.8652-.1352L4,7.4727V2H2V28a2,2,0,0,0,2,2H30V28H4V23.6577ZM28,21.2344l-6.4966,1.75-8.0371-4.68a1.9931,1.9931,0,0,0-1.8652-.1353L4,21.4746V16.6572l8.4326-3.6416L20.47,17.6968a1.962,1.962,0,0,0,1.0508.3008,2.2112,2.2112,0,0,0,.4888-.0557L28,16.31ZM12.4326,6.0156l8.0376,4.68a2.0091,2.0091,0,0,0,1.54.2451L28,9.3081v4.9258l-6.4966,1.7505-8.0371-4.6812a1.9917,1.9917,0,0,0-1.8652-.1352L4,14.4736V9.6562Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ka);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bi||(Bi=i.createElement("path",{d:"M30,17A15.017,15.017,0,0,0,15,2H14V8.0591A9.0122,9.0122,0,0,0,6.0591,16H4v1A11.0109,11.0109,0,0,0,14,27.9492V30h1A13.0084,13.0084,0,0,0,27.9492,18H30ZM16,4.0381A13.0217,13.0217,0,0,1,27.9619,16H16ZM14,10.08V16H8.08A7.0037,7.0037,0,0,1,14,10.08ZM6.0552,18H14v7.939A9.0134,9.0134,0,0,1,6.0552,18ZM16,27.9551V18h9.9551A11.0191,11.0191,0,0,1,16,27.9551Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ga);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Oi||(Oi=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),Fi||(Fi=i.createElement("circle",{cx:"10",cy:"22",r:"2"})),qi||(qi=i.createElement("circle",{cx:"14",cy:"15",r:"2"})),Xi||(Xi=i.createElement("circle",{cx:"22",cy:"15",r:"2"})),Ci||(Ci=i.createElement("circle",{cx:"26",cy:"6",r:"2"})),Hi||(Hi=i.createElement("circle",{cx:"14",cy:"8",r:"2"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ki||(ki=i.createElement("path",{d:"M16,2A13.919,13.919,0,0,0,7.3245,5.0327,1.9728,1.9728,0,0,0,7,5,2,2,0,0,0,5,7a1.9752,1.9752,0,0,0,.0327.3247A13.986,13.986,0,1,0,16,2Zm0,26A11.977,11.977,0,0,1,6.3589,8.8857a1.8311,1.8311,0,0,0,1.1528.04l1.4634,1.4634a8.9862,8.9862,0,0,0,11.8311,13.207,1.9916,1.9916,0,0,0,2.79-2.79,8.9294,8.9294,0,0,0,0-9.6124,1.9916,1.9916,0,0,0-2.79-2.79,8.9445,8.9445,0,0,0-10.417.5713L8.9258,7.5117a1.8294,1.8294,0,0,0-.04-1.1528A11.9925,11.9925,0,1,1,16,28Zm0-14a2,2,0,1,1-2,2A2.0025,2.0025,0,0,1,16,14Zm3.4331-.019,2.0552-2.0552a2.0443,2.0443,0,0,0,.2265.0454,6.9573,6.9573,0,0,1,0,8.0576,2.0443,2.0443,0,0,0-.2265.0454L19.4331,18.019a3.8788,3.8788,0,0,0,0-4.038Zm.5957-3.6958a1.9993,1.9993,0,0,0,.0454.2265L18.019,12.5669a3.8788,3.8788,0,0,0-4.038,0l-2.1653-2.1655a6.9522,6.9522,0,0,1,8.2131-.1162ZM12.5669,13.981A3.951,3.951,0,0,0,12,16a4.0045,4.0045,0,0,0,4,4,3.9521,3.9521,0,0,0,2.019-.5669l2.0552,2.0552a1.9993,1.9993,0,0,0-.0454.2265,6.988,6.988,0,0,1-9.6272-9.8994Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ja);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ni||(Ni=i.createElement("path",{d:"M28,28V6H20V28H16V14H8V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM22,8h4V18H22ZM10,16h4v6H10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$a);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zi||(Zi=i.createElement("path",{d:"M14,22V14h8V6h8V4H20v8H12v8H4V2H2V28a2.0025,2.0025,0,0,0,2,2H30V28H4V22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,en);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yi||(Yi=i.createElement("path",{d:"M16,2a1,1,0,0,0-1,1v7.09a5.9618,5.9618,0,0,0-2.46,1.043L7.8384,6.4311a1.4554,1.4554,0,0,0-2.087.0244A14.05,14.05,0,0,0,9.8047,28.5972a10.8482,10.8482,0,0,0,1.8989.7676,14.0982,14.0982,0,0,0,13.8443-3.1319,1.4336,1.4336,0,0,0,.0278-2.0639L20.877,19.47A5.963,5.963,0,0,0,21.91,17H29a1,1,0,0,0,1-1A14.0158,14.0158,0,0,0,16,2Zm0,10a4,4,0,1,1-4,4A4.0045,4.0045,0,0,1,16,12ZM6.83,8.251l4.2959,4.2959a5.91,5.91,0,0,0-.0113,6.9243L6.8381,23.7481A12.0168,12.0168,0,0,1,6.83,8.251Zm1.4228,16.91,4.2759-4.2759A5.9589,5.9589,0,0,0,15,21.91v6.042A11.8783,11.8783,0,0,1,8.2529,25.1612ZM17,27.9561V21.9092a5.9631,5.9631,0,0,0,2.4609-1.0273l4.2818,4.2817A11.8905,11.8905,0,0,1,17,27.9561ZM21.91,15A6.0063,6.0063,0,0,0,17,10.09V4.041A12.0208,12.0208,0,0,1,27.9585,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pi||(Pi=i.createElement("circle",{cx:"10",cy:"20",r:"2"})),ji||(ji=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Ki||(Ki=i.createElement("circle",{cx:"10",cy:"14",r:"2"})),Gi||(Gi=i.createElement("circle",{cx:"28",cy:"4",r:"2"})),Qi||(Qi=i.createElement("circle",{cx:"22",cy:"6",r:"2"})),Ji||(Ji=i.createElement("circle",{cx:"28",cy:"10",r:"2"})),$i||($i=i.createElement("circle",{cx:"20",cy:"12",r:"2"})),et||(et=i.createElement("circle",{cx:"28",cy:"22",r:"2"})),it||(it=i.createElement("circle",{cx:"26",cy:"28",r:"2"})),tt||(tt=i.createElement("circle",{cx:"20",cy:"26",r:"2"})),_t||(_t=i.createElement("circle",{cx:"22",cy:"20",r:"2"})),st||(st=i.createElement("circle",{cx:"16",cy:"4",r:"2"})),at||(at=i.createElement("circle",{cx:"4",cy:"24",r:"2"})),nt||(nt=i.createElement("circle",{cx:"4",cy:"16",r:"2"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_n);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rt||(rt=i.createElement("path",{d:"M28,2H4A2.0023,2.0023,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,12H23V4h5ZM16,4h5V14H16ZM14,4V20H4V4ZM4,22H14v6H4Zm12,6V16H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lt||(lt=i.createElement("path",{d:"M20,6a9.92,9.92,0,0,0-4,.84A9.92,9.92,0,0,0,12,6a10,10,0,0,0,0,20,9.92,9.92,0,0,0,4-.84A9.92,9.92,0,0,0,20,26,10,10,0,0,0,20,6ZM12,24A8,8,0,0,1,12,8a7.91,7.91,0,0,1,1.76.2,10,10,0,0,0,0,15.6A7.91,7.91,0,0,1,12,24Zm8-8a8,8,0,0,1-4,6.92A8,8,0,0,1,16,9.08,8,8,0,0,1,20,16Zm0,8a7.91,7.91,0,0,1-1.76-.2,10,10,0,0,0,0-15.6A7.91,7.91,0,0,1,20,8a8,8,0,0,1,0,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,an);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dt||(dt=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),ot||(ot=i.createElement("path",{d:"M14.86 7.8232L13 4.7231V2H11V4.7231l-1.86 3.1A7.9986 7.9986 0 008 11.939v.122a7.9961 7.9961 0 001.14 4.1158l1.86 3.1V26h2V19.2769l1.86-3.1A7.9986 7.9986 0 0016 12.061v-.122A7.9961 7.9961 0 0014.86 7.8232zM12 6.9434l1.145 1.9087A6.0027 6.0027 0 0113.9185 11h-3.837a6.0086 6.0086 0 01.7735-2.1484zm0 10.1132l-1.145-1.9087A6.0027 6.0027 0 0110.0815 13h3.837a6.0086 6.0086 0 01-.7735 2.1484zM27.86 11.8232L26 8.7231V2H24V8.7231l-1.86 3.1A7.9986 7.9986 0 0021 15.939v.122a7.9961 7.9961 0 001.14 4.1158l1.86 3.1V26h2V23.2769l1.86-3.1A7.9986 7.9986 0 0029 16.061v-.122A7.9961 7.9961 0 0027.86 11.8232zm-2.86-.88l1.145 1.9087A6.0027 6.0027 0 0126.9185 15h-3.837a6.0086 6.0086 0 01.7735-2.1484zm0 10.1132l-1.145-1.9087A6.0027 6.0027 0 0123.0815 17h3.837a6.0086 6.0086 0 01-.7735 2.1484z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mt||(mt=i.createElement("path",{d:"M28,28V18H26V28H22V4H20V28H10V14H8V28H4V2H2V28a2.0023,2.0023,0,0,0,2,2H30V28Z"})),vt||(vt=i.createElement("path",{d:"M14 4H16V18H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ct||(ct=i.createElement("path",{d:"M30,15H16V6a2.0023,2.0023,0,0,0-2-2H6A2.0023,2.0023,0,0,0,4,6v9H2v2H16v9a2.0023,2.0023,0,0,0,2,2h8a2.0023,2.0023,0,0,0,2-2V17h2ZM6,6h8v9H6ZM26,26H18V17h8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ln);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ut||(ut=i.createElement("path",{d:"M17.74,30,16,29l4-7h6a2,2,0,0,0,2-2V8a2,2,0,0,0-2-2H6A2,2,0,0,0,4,8V20a2,2,0,0,0,2,2h9v2H6a4,4,0,0,1-4-4V8A4,4,0,0,1,6,4H26a4,4,0,0,1,4,4V20a4,4,0,0,1-4,4H21.16Z"})),ft||(ft=i.createElement("path",{d:"M8 10H24V12H8zM8 16H18V18H8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bt||(bt=i.createElement("path",{d:"M22 4L22 6 26.586 6 20 12.586 21.414 14 28 7.414 28 12 30 12 30 4 22 4zM28 16v4a1.9965 1.9965 0 01-2 2H20l-4 7 1.7358 1 3.4288-6H26a3.9992 3.9992 0 004-4V16zM4 20V8A1.9965 1.9965 0 016 6H18V4H6A3.9986 3.9986 0 002 8V20a3.9992 3.9992 0 004 4h9V22H6A1.9965 1.9965 0 014 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,on);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pt||(pt=i.createElement("path",{d:"M28 8V21h2V8a3.9986 3.9986 0 00-4-4H8.2429l2 2H26A1.9965 1.9965 0 0128 8zM30 28.5859L3.4141 2 2 3.4141 3.5039 4.918A3.9181 3.9181 0 002 8V20a3.9992 3.9992 0 004 4h6V22H6a1.9965 1.9965 0 01-2-2V8a1.9814 1.9814 0 01.9194-1.6665L20.5859 22H17l-4 7 1.7358 1 3.4288-6h4.4213l6 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gt||(gt=i.createElement("path",{d:"M15.586 10.414L19.166 14 19.166 14 15.584 17.587 17 19 22 14 17 9 15.586 10.414z"})),Et||(Et=i.createElement("path",{d:"M20.586 10.414L24.166 14 24.166 14 20.584 17.587 22 19 27 14 22 9 20.586 10.414zM10 9L11.593 12 15 12.414 12.5 14.667 13 18 10 16.125 7 18 7.5 14.667 5 12.414 8.5 12 10 9z"})),wt||(wt=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V8a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,8V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V8A3.9988,3.9988,0,0,1,6,4H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ht||(ht=i.createElement("path",{d:"M16 19a6.9908 6.9908 0 01-5.833-3.1287l1.666-1.1074a5.0007 5.0007 0 008.334 0l1.666 1.1074A6.9908 6.9908 0 0116 19zM20 8a2 2 0 102 2A1.9806 1.9806 0 0020 8zM12 8a2 2 0 102 2A1.9806 1.9806 0 0012 8z"})),xt||(xt=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V6a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,6V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V6A3.9988,3.9988,0,0,1,6,2H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zt||(zt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,un);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lt||(Lt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),Mt||(Mt=i.createElement("path",{d:"M14 21.5L9 16.54 10.59 15 14 18.35 21.41 11 23 12.58 14 21.5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rt||(Rt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM14,21.5,9,16.5427,10.5908,15,14,18.3456,21.4087,11l1.5918,1.5772Z"})),St||(St=i.createElement("path",{fill:"none",d:"M14,21.5,9,16.5427,10.5908,15,14,18.3456,21.4087,11l1.5918,1.5772Z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dt||(Dt=i.createElement("path",{d:"M10 14H22V18H10z"})),yt||(yt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vt||(Vt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM22,18H10V14H22Z"})),At||(At=i.createElement("path",{fill:"none",d:"M22,18H10V14H22Z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gn);return 20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Tt||(Tt=i.createElement("path",{d:"M8 13.2L3.6 8.8 2.7 9.7 7.1 14.1 8 15 16.5 6.5 15.6 5.6z"})),Wt||(Wt=i.createElement("path",{d:"M15.6 5.6L8 13.2 3.6 8.8 2.7 9.7 7.1 14.1 8 15 16.5 6.5 15.6 5.6z"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Ut||(Ut=i.createElement("path",{d:"M10 15.9L4.7 10.6 3.6 11.6 8.9 16.9 10 18 20.6 7.4 19.5 6.3z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),It||(It=i.createElement("path",{d:"M13 24L4 15 5.414 13.586 13 21.171 26.586 7.586 28 9 13 24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,En);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Bt||(Bt=i.createElement("path",{d:"M8,1C4.1,1,1,4.1,1,8c0,3.9,3.1,7,7,7s7-3.1,7-7C15,4.1,11.9,1,8,1z M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z"})),Ot||(Ot=i.createElement("path",{d:"M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z","data-icon-path":"inner-path",opacity:"0"})),_):20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Ft||(Ft=i.createElement("path",{d:"M10,1c-4.9,0-9,4.1-9,9s4.1,9,9,9s9-4,9-9S15,1,10,1z M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z"})),qt||(qt=i.createElement("path",{fill:"none",d:"M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z","data-icon-path":"inner-path",opacity:"0"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Xt||(Xt=i.createElement("path",{d:"M12,1C6,1,1,6,1,12s5,11,11,11s11-4.9,11-11S18.1,1,12,1z M10.4,16.3l-3.9-3.9l1.3-1.2l2.7,2.7l5.8-5.8l1.3,1.3L10.4,16.3z"})),Ct||(Ct=i.createElement("path",{fill:"none",d:"M10.4,16.3l-3.9-3.9l1.3-1.2l2.7,2.7l5.8-5.8l1.3,1.3L10.4,16.3z","data-icon-path":"inner-path",opacity:"0"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ht||(Ht=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM14,21.5908l-5-5L10.5906,15,14,18.4092,21.41,11l1.5957,1.5859Z"})),kt||(kt=i.createElement("path",{fill:"none",d:"M14 21.591L9 16.591 10.591 15 14 18.409 21.41 11 23.005 12.585 14 21.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nt||(Nt=i.createElement("path",{d:"M30,24a6,6,0,1,0-6,6A6.0066,6.0066,0,0,0,30,24Zm-2,0a3.9521,3.9521,0,0,1-.5669,2.019L21.981,20.5669A3.9529,3.9529,0,0,1,24,20,4.0045,4.0045,0,0,1,28,24Zm-8,0a3.9521,3.9521,0,0,1,.5669-2.019l5.4521,5.4521A3.9529,3.9529,0,0,1,24,28,4.0045,4.0045,0,0,1,20,24Z"})),Zt||(Zt=i.createElement("path",{d:"M14,2a12,12,0,1,0,2,23.82V24a8,8,0,0,1,8-8h1.82A11.9348,11.9348,0,0,0,14,2ZM12,18.5908l-4-4L9.5908,13,12,15.4092,17.4092,10,19,11.5908Z"})),Yt||(Yt=i.createElement("path",{fill:"none",d:"M12 18.591L8 14.591 9.591 13 12 15.409 17.409 10 19 11.591 12 18.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pt||(Pt=i.createElement("path",{d:"M14,2a12,12,0,1,0,3.3928,23.5059l3.9246-7.8492A2.9846,2.9846,0,0,1,24,16h1.82A11.9348,11.9348,0,0,0,14,2ZM12,18.5908l-4-4L9.5908,13,12,15.4092,17.4092,10,19,11.5908Z"})),jt||(jt=i.createElement("path",{d:"M27.38,28H20.6178L24,21.2358ZM24,18a1,1,0,0,0-.8947.5527l-5,10A1.0005,1.0005,0,0,0,19,30H29a1,1,0,0,0,.9214-1.3892L24.8946,18.5527A1,1,0,0,0,24,18Z"})),Kt||(Kt=i.createElement("path",{fill:"none",d:"M12 18.591L8 14.591 9.591 13 12 15.409 17.409 10 19 11.591 12 18.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gt||(Gt=i.createElement("path",{d:"M14 21.414L9 16.413 10.413 15 14 18.586 21.585 11 23 12.415 14 21.414z"})),Qt||(Qt=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,26A12,12,0,1,1,28,16,12,12,0,0,1,16,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jt||(Jt=i.createElement("path",{d:"M14,24A10,10,0,1,1,24,14h2A12,12,0,1,0,14,26Z"})),$t||($t=i.createElement("path",{d:"M12 15.59L9.41 13 8 14.41 12 18.41 19 11.41 17.59 10 12 15.59zM30 24a6 6 0 10-6 6A6.0066 6.0066 0 0030 24zm-2 0a3.9521 3.9521 0 01-.5669 2.019L21.981 20.5669A3.9529 3.9529 0 0124 20 4.0045 4.0045 0 0128 24zm-8 0a3.9521 3.9521 0 01.5669-2.019l5.4521 5.4521A3.9529 3.9529 0 0124 28 4.0045 4.0045 0 0120 24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ln);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),e_||(e_=i.createElement("path",{d:"M14,24A10,10,0,1,1,24,14h2A12,12,0,1,0,14,26Z"})),i_||(i_=i.createElement("path",{d:"M12 15.59L9.41 13 8 14.41 12 18.41 19 11.41 17.59 10 12 15.59zM27.38 28H20.6178L24 21.2358zM24 18a1 1 0 00-.8947.5527l-5 10A1.0005 1.0005 0 0019 30H29a1 1 0 00.9214-1.3892L24.8946 18.5527A1 1 0 0024 18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),t_||(t_=i.createElement("path",{d:"M27.2314,23.6182,20,13.6748V4h2V2H10V4h2v9.6748L4.7686,23.6182A4.0183,4.0183,0,0,0,8.0186,30H23.9814a4.0183,4.0183,0,0,0,3.25-6.3818ZM14,14.3252V4h4V14.3252L20.6728,18H11.3272ZM23.9814,28H8.0186a2.0192,2.0192,0,0,1-1.6329-3.2061L9.8726,20H22.1274l3.4869,4.7939A2.0192,2.0192,0,0,1,23.9814,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),__||(__=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20z"})),s_||(s_=i.createElement("path",{d:"M20,13.67V4h2V2H10V4h2v9.67L9.58,17h2.4767L14,14.33V4h4V14.33l7.61,10.46a2.0133,2.0133,0,0,1-.44,2.82,2.0406,2.0406,0,0,1-1.19.39H15v2h8.98a4.0154,4.0154,0,0,0,3.25-6.38Z"})),_)})).propTypes=da;var Dr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 6",fill:"currentColor"},n),a_||(a_=i.createElement("path",{d:"M5 6L0 1 0.7 0.3 5 4.6 9.3 0.3 10 1z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),n_||(n_=i.createElement("path",{d:"M8 11L3 6 3.7 5.3 8 9.6 12.3 5.3 13 6z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),r_||(r_=i.createElement("path",{d:"M16 22L6 12 7.4 10.6 16 19.2 24.6 10.6 26 12z"})),_)}));Dr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6 10",fill:"currentColor"},n),l_||(l_=i.createElement("path",{d:"M0 5L5 0 5.7 0.7 1.4 5 5.7 9.3 5 10z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),d_||(d_=i.createElement("path",{d:"M5 8L10 3 10.7 3.7 6.4 8 10.7 12.3 10 13z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),o_||(o_=i.createElement("path",{d:"M10 16L20 6 21.4 7.4 12.8 16 21.4 24.6 20 26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),m_||(m_=i.createElement("path",{d:"M15 9L15 15 9 15z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),v_||(v_=i.createElement("path",{d:"M31 19L31 31 19 31 31 19z"})),_)})).propTypes=da;var yr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6 10",fill:"currentColor"},n),c_||(c_=i.createElement("path",{d:"M6 5L1 10 0.3 9.3 4.6 5 0.3 0.7 1 0z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),u_||(u_=i.createElement("path",{d:"M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),f_||(f_=i.createElement("path",{d:"M22 16L12 26 10.6 24.6 19.2 16 10.6 7.4 12 6z"})),_)}));yr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,An);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),b_||(b_=i.createElement("path",{d:"M8 14L4.5 10.5 5.2 9.8 8 12.6 10.8 9.8 11.5 10.5zM8 2L11.5 5.5 10.8 6.2 8 3.4 5.2 6.2 4.5 5.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),p_||(p_=i.createElement("path",{d:"M16 28L9 21 10.41 19.59 16 25.17 21.59 19.59 23 21 16 28zM16 4L23 11 21.59 12.41 16 6.83 10.41 12.41 9 11 16 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),g_||(g_=i.createElement("path",{d:"M8 14L4.5 10.5 5.2 9.8 8 12.6 10.8 9.8 11.5 10.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),E_||(E_=i.createElement("path",{d:"M16 28L9 21 10.4 19.6 16 25.2 21.6 19.6 23 21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),w_||(w_=i.createElement("path",{d:"M8 2L11.5 5.5 10.8 6.2 8 3.4 5.2 6.2 4.5 5.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),h_||(h_=i.createElement("path",{d:"M16 4L23 11 21.6 12.4 16 6.8 10.4 12.4 9 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Un);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 6",fill:"currentColor"},n),x_||(x_=i.createElement("path",{d:"M5 0L10 5 9.3 5.7 5 1.4 0.7 5.7 0 5z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),z_||(z_=i.createElement("path",{d:"M8 5L13 10 12.3 10.7 8 6.4 3.7 10.7 3 10z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),L_||(L_=i.createElement("path",{d:"M16 10L26 20 24.6 21.4 16 12.8 7.4 21.4 6 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,In);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),M_||(M_=i.createElement("path",{d:"M11,11V21H21V11Zm8,8H13V13h6Z"})),R_||(R_=i.createElement("path",{d:"M30,13V11H26V8a2,2,0,0,0-2-2H21V2H19V6H13V2H11V6H8A2,2,0,0,0,6,8v3H2v2H6v6H2v2H6v3a2,2,0,0,0,2,2h3v4h2V26h6v4h2V26h3a2,2,0,0,0,2-2V21h4V19H26V13ZM24,24H8V8H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),S_||(S_=i.createElement("path",{d:"M28 13L28 4 19 4 19 6 24.586 6 16 14.586 7.414 6 13 6 13 4 4 4 4 13 6 13 6 7.414 15 16.414 15 26 4 26 4 28 28 28 28 26 17 26 17 16.414 26 7.414 26 13 28 13z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,On);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),D_||(D_=i.createElement("path",{d:"M28 6H30V26H28zM17 6L15.57 7.393 23.15 15 2 15 2 17 23.15 17 15.57 24.573 17 26 27 16 17 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),y_||(y_=i.createElement("path",{d:"M29.2427,4.03l-8-2a1.0065,1.0065,0,0,0-.6143.0415l-9.7,3.88L3.2427,4.03A1,1,0,0,0,2,5V27a1,1,0,0,0,.7573.97l8,2A1.0244,1.0244,0,0,0,11,30a.9953.9953,0,0,0,.3716-.0718l9.7-3.88,7.686,1.9219A1,1,0,0,0,30,27V5A1,1,0,0,0,29.2427,4.03ZM28,11H22V4.2806l6,1.5ZM10,19H4V13h6Zm2-8V7.6771l8-3.2V11Zm8,2v6H12V13Zm-8,8h8v3.3227l-8,3.2Zm10-8h6v6H22ZM10,7.7806V11H4V6.2806ZM4,21h6v6.7192l-6-1.5Zm18,3.2187V21h6v4.7192Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),V_||(V_=i.createElement("path",{d:"M30.3335 30H26V28h4V26H28a2.002 2.002 0 01-2-2V21.6665A1.6684 1.6684 0 0127.6665 20H32v2H28v2h2a2.002 2.002 0 012 2v2.3335A1.6684 1.6684 0 0130.3335 30zM22.3335 20h-2.667A1.6665 1.6665 0 0018 21.6665V30h2V26h2v4h2V21.6665A1.6665 1.6665 0 0022.3335 20zM20 24V22h2v2zM12.5 24L11 20 9 20 9 30 11 30 11 23 12.5 27 14 23 14 30 16 30 16 20 14 20 12.5 24zM1 22v6.5A1.4727 1.4727 0 002.5 30H7V28H3V22H7V20H3A2.0059 2.0059 0 001 22zM13 8L11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13 16 11 13 11 13 8z"})),A_||(A_=i.createElement("path",{d:"M6,6H26V18h2V6a2.0059,2.0059,0,0,0-2-2H6A2.0059,2.0059,0,0,0,4,6V18H6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),T_||(T_=i.createElement("path",{d:"M24 16L19.4 14.6 21.7 10.3 17.4 12.6 16 8 14.6 12.6 10.3 10.3 12.6 14.6 8 16 12.6 17.4 10.3 21.7 14.6 19.4 16 24 17.4 19.4 21.7 21.7 19.4 17.4 24 16z"})),W_||(W_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),U_||(U_=i.createElement("path",{d:"M28 2H23V4h5V28H23v2h5a2.0059 2.0059 0 002-2V4A2.0059 2.0059 0 0028 2zM14 17H8a.9448.9448 0 00-1 1v6a.9448.9448 0 001 1h6a.9448.9448 0 001-1V18A.9448.9448 0 0014 17zm-1 6H9V19h4z"})),I_||(I_=i.createElement("path",{d:"M25 24V18a.9448.9448 0 00-1-1H18a.9448.9448 0 00-1 1v6a.9448.9448 0 001 1h6A1.0021 1.0021 0 0025 24zm-2-1H19V19h4zM14 7H8A.9448.9448 0 007 8v6a.9448.9448 0 001 1h6a.9448.9448 0 001-1V8A.9448.9448 0 0014 7zm-1 6H9V9h4zM18 15h6a.9448.9448 0 001-1V8a.9448.9448 0 00-1-1H18a.9448.9448 0 00-1 1v6A1.0021 1.0021 0 0018 15zm1-6h4v4H19z"})),B_||(B_=i.createElement("path",{d:"M4,4H9V2H4A2.0059,2.0059,0,0,0,2,4V28a2.0059,2.0059,0,0,0,2,2H9V28H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),O_||(O_=i.createElement("path",{d:"M22 22L24 22 24 28 22 28 22 30 28 30 28 28 26 28 26 22 28 22 28 20 22 20 22 22zM18 28H16V20H14v8.6A1.4529 1.4529 0 0015.5 30h3A1.4529 1.4529 0 0020 28.6V20H18zM10.2 20L10 28.5 9 22 7 22 6 28.5 5.8 20 4 20 4.72 30 7 30 8 23.5 9 30 11.28 30 12 20 10.2 20zM16 11L13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13 16 11z"})),F_||(F_=i.createElement("path",{d:"M26,4H6A2.0059,2.0059,0,0,0,4,6V18H6V6H26V18h2V6A2.0059,2.0059,0,0,0,26,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),q_||(q_=i.createElement("path",{d:"M23.5 18L21 18.7 21 16 19 16 19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18zM16 13L16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13z"})),X_||(X_=i.createElement("path",{d:"M26,4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V6A2.0059,2.0059,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),C_||(C_=i.createElement("path",{d:"M22 2L22 4 26.6 4 20 10.6 21.4 12 28 5.4 28 10 30 10 30 2 22 2zM19 16L19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18 21 18.7 21 16 19 16zM13 16L13 13 16 13 16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16z"})),H_||(H_=i.createElement("path",{d:"M26,26H6V6H19V4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V13H26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),k_||(k_=i.createElement("path",{d:"M26 7H28V10H26zM29 4H32V6H29zM26 0H28V3H26zM22 4H25V6H22zM19 16L19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18 21 18.7 21 16 19 16zM13 16L13 13 16 13 16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16z"})),N_||(N_=i.createElement("path",{d:"M26,26H6V6H19V4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V13H26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Z_||(Z_=i.createElement("path",{d:"M8 18.6V17H6v1.6A7.3833 7.3833 0 0013.4 26H15V24H13.4A5.3775 5.3775 0 018 18.6zM28 18H20a2.0059 2.0059 0 00-2 2v8a2.0059 2.0059 0 002 2h8a2.0059 2.0059 0 002-2V20A2.0059 2.0059 0 0028 18zM20 28V20h8v8zM24 13.4V15h2V13.4A7.3833 7.3833 0 0018.6 6H17V8h1.6A5.3775 5.3775 0 0124 13.4zM12 2H4A2.0059 2.0059 0 002 4v8a2.0059 2.0059 0 002 2h8a2.0059 2.0059 0 002-2V4A2.0059 2.0059 0 0012 2zM4 12V4h8v8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Y_||(Y_=i.createElement("circle",{cx:"16",cy:"16",r:"10"})),P_||(P_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),j_||(j_=i.createElement("circle",{cx:"16",cy:"16",r:"14"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),K_||(K_=i.createElement("path",{d:"M7.7 4.7a14.7 14.7 0 00-3 3.1L6.3 9A13.26 13.26 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.51 12.51 0 002 16H4A11.48 11.48 0 014.6 12.3zM2.7 20.4a14.4 14.4 0 002 3.9l1.6-1.2a12.89 12.89 0 01-1.7-3.3zM7.8 27.3a14.4 14.4 0 003.9 2l.6-1.9A12.89 12.89 0 019 25.7zM11.7 2.7l.6 1.9A11.48 11.48 0 0116 4V2A12.51 12.51 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.53 11.53 0 0123 25.7zM27.4 19.7l1.9.6A15.47 15.47 0 0030 16H28A11.48 11.48 0 0127.4 19.7zM29.2 11.6a14.4 14.4 0 00-2-3.9L25.6 8.9a12.89 12.89 0 011.7 3.3zM24.1 4.6a14.4 14.4 0 00-3.9-2l-.6 1.9a12.89 12.89 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.48 11.48 0 0116 28v2A21.42 21.42 0 0020.3 29.3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),G_||(G_=i.createElement("circle",{cx:"8",cy:"8",r:"6"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Q_||(Q_=i.createElement("circle",{cx:"8",cy:"8",r:"6"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),J_||(J_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14,14,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4Z"})),$_||($_=i.createElement("path",{d:"M21,12.41V16h2V9H16v2h3.59L11,19.59V16H9v7h7V21H12.41Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),es||(es=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm7.5,7A3.5,3.5,0,1,1,20,12.5,3.5041,3.5041,0,0,1,23.5,9Zm.4348-1.978C23.791,7.0107,23.6467,7,23.5,7a5.4826,5.4826,0,0,0-4.1323,1.8784,8.0109,8.0109,0,0,0-5.5664-4.6675A11.8554,11.8554,0,0,1,23.9348,7.022ZM16,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,28ZM12,18a6,6,0,1,1,6-6A6.0067,6.0067,0,0,1,12,18ZM4,16a11.97,11.97,0,0,1,.2112-2.1987,7.9921,7.9921,0,0,0,7.3459,6.1762,5.9581,5.9581,0,0,0-.89,6.7564A12.0025,12.0025,0,0,1,4,16ZM21.3325,26.7339a5.9834,5.9834,0,0,0-4.1782-8.6206,8.02,8.02,0,0,0,1.9126-2.3672,5.4883,5.4883,0,0,0,8.9167-.0679c.003.1079.0164.2134.0164.3218A12.0025,12.0025,0,0,1,21.3325,26.7339Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$n);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),is||(is=i.createElement("path",{d:"M8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4M8,2a6,6,0,1,0,6,6A6,6,0,0,0,8,2Z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),ts||(ts=i.createElement("path",{d:"M8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4M8,2a6,6,0,1,0,6,6A6,6,0,0,0,8,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,er);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_s||(_s=i.createElement("path",{d:"M18 9L18 15 14 15 14 9 12 9 12 23 14 23 14 17 18 17 18 23 20 23 20 9 18 9z"})),ss||(ss=i.createElement("path",{d:"M30,15H26V6a2,2,0,0,0-2-2H8A2,2,0,0,0,6,6v9H2v2H6v9a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V17h4ZM8,26V6H24V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ir);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),as||(as=i.createElement("circle",{cx:"15",cy:"19",r:"1"})),ns||(ns=i.createElement("path",{d:"M27.7,9.3l-7-7A.9087.9087,0,0,0,20,2H10A2.0058,2.0058,0,0,0,8,4V14H6a2.0023,2.0023,0,0,0-2,2v6a2.0023,2.0023,0,0,0,2,2H8v4a2.0058,2.0058,0,0,0,2,2H26a2.0058,2.0058,0,0,0,2-2V10A.9092.9092,0,0,0,27.7,9.3ZM20,4.4,25.6,10H20ZM6,16h9.5972L19,19l-3.3926,3H6ZM26,28H10V24h5.6089a2.0076,2.0076,0,0,0,1.3135-.4927l3.3833-2.9917a2.0015,2.0015,0,0,0,.01-3.0229l-3.4033-3.0083A1.9961,1.9961,0,0,0,15.6089,14H10V4h8v6a2.0058,2.0058,0,0,0,2,2h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rs||(rs=i.createElement("path",{d:"M30 10V2H22v8h3v4H23v2h7V14H27V10zM24 4h4V8H24zM20 23.41L18.59 22 16 24.59 13.41 22 12 23.41 14.59 26 12 28.59 13.41 30 16 27.41 18.59 30 20 28.59 17.41 26 20 23.41zM20 14L12 14 12 16 15 16 15 21 17 21 17 16 20 16 20 14zM7 9.86a4 4 0 10-2 0V14H2v2H9V14H7zM4 6A2 2 0 116 8 2 2 0 014 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_r);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ls||(ls=i.createElement("path",{d:"M20 18H26V20H20z",transform:"rotate(-180 23 19)"})),ds||(ds=i.createElement("path",{d:"M24 26H30V28H24z",transform:"rotate(-180 27 27)"})),os||(os=i.createElement("path",{d:"M22 22H28V24H22z",transform:"rotate(-180 25 23)"})),ms||(ms=i.createElement("path",{d:"M17.0029,20a4.8952,4.8952,0,0,0-2.4044-4.1729L22,3,20.2691,2,12.6933,15.126A5.6988,5.6988,0,0,0,7.45,16.6289C3.7064,20.24,3.9963,28.6821,4.01,29.04a1,1,0,0,0,1,.96H20.0012a1,1,0,0,0,.6-1.8C17.0615,25.5439,17.0029,20.0537,17.0029,20ZM11.93,16.9971A3.11,3.11,0,0,1,15.0041,20c0,.0381.0019.208.0168.4688L9.1215,17.8452A3.8,3.8,0,0,1,11.93,16.9971ZM15.4494,28A5.2,5.2,0,0,1,14,25H12a6.4993,6.4993,0,0,0,.9684,3H10.7451A16.6166,16.6166,0,0,1,10,24H8a17.3424,17.3424,0,0,0,.6652,4H6c.031-1.8364.29-5.8921,1.8027-8.5527l7.533,3.35A13.0253,13.0253,0,0,0,17.5968,28Z"})),_)})).propTypes=da;var Vr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vs||(vs=i.createElement("path",{d:"M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z"})),_)}));Vr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ar);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),cs||(cs=i.createElement("path",{d:"M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7S11.9,1,8,1z M10.7,11.5L8,8.8l-2.7,2.7l-0.8-0.8L7.2,8L4.5,5.3l0.8-0.8L8,7.2 l2.7-2.7l0.8,0.8L8.8,8l2.7,2.7L10.7,11.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),us||(us=i.createElement("path",{d:"M16,2C8.2,2,2,8.2,2,16s6.2,14,14,14s14-6.2,14-14S23.8,2,16,2z M21.4,23L16,17.6L10.6,23L9,21.4l5.4-5.4L9,10.6L10.6,9 l5.4,5.4L21.4,9l1.6,1.6L17.6,16l5.4,5.4L21.4,23z"})),fs||(fs=i.createElement("path",{d:"M14.4 16L9 10.6 10.6 9 16 14.4 21.4 9 23 10.6 17.6 16 23 21.4 21.4 23 16 17.6 10.6 23 9 21.4 14.4 16","data-icon-path":"inner-path",opacity:"0"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bs||(bs=i.createElement("path",{d:"M16,2C8.2,2,2,8.2,2,16s6.2,14,14,14s14-6.2,14-14S23.8,2,16,2z M16,28C9.4,28,4,22.6,4,16S9.4,4,16,4s12,5.4,12,12 S22.6,28,16,28z"})),ps||(ps=i.createElement("path",{d:"M21.4 23L16 17.6 10.6 23 9 21.4 14.4 16 9 10.6 10.6 9 16 14.4 21.4 9 23 10.6 17.6 16 23 21.4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gs||(gs=i.createElement("path",{d:"M15 21H10a2 2 0 01-2-2V13a2 2 0 012-2h5v2H10v6h5zM25 21H20a2 2 0 01-2-2V13a2 2 0 012-2h5v2H20v6h5z"})),Es||(Es=i.createElement("path",{d:"M28,26H4a2,2,0,0,1-2-2V8A2,2,0,0,1,4,6H28a2,2,0,0,1,2,2V24A2,2,0,0,1,28,26ZM4,8V24H28V8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ws||(ws=i.createElement("path",{d:"M19 17H25V19H19zM11 17H17V19H11zM6 17H9V19H6zM22 13H26V15H22zM13 13H20V15H13zM6 13H11V15H6z"})),hs||(hs=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V8a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,8V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V8A3.9988,3.9988,0,0,1,6,4H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xs||(xs=i.createElement("path",{d:"M28,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6ZM15,13H10v6h5v2H10a2,2,0,0,1-2-2V13a2,2,0,0,1,2-2h5Zm10,0H20v6h5v2H20a2,2,0,0,1-2-2V13a2,2,0,0,1,2-2h5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,or);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zs||(zs=i.createElement("path",{d:"M16,7h0a7.66,7.66,0,0,1,1.51.15,8,8,0,0,1,6.35,6.34l.26,1.35,1.35.24a5.5,5.5,0,0,1-1,10.92H7.5a5.5,5.5,0,0,1-1-10.92l1.34-.24.26-1.35A8,8,0,0,1,16,7m0-2a10,10,0,0,0-9.83,8.12A7.5,7.5,0,0,0,7.49,28h17a7.5,7.5,0,0,0,1.32-14.88,10,10,0,0,0-7.94-7.94A10.27,10.27,0,0,0,16,5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ls||(Ls=i.createElement("path",{d:"M28,17v5H4V6H15V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V17ZM18,28H14V24h4Z"})),Ms||(Ms=i.createElement("path",{d:"M29,14H17a1,1,0,0,1-.8574-1.5144l6-10a1,1,0,0,1,1.7154,0l6,10A1,1,0,0,1,29,14ZM18.7661,12h8.4678L23,4.9436Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rs||(Rs=i.createElement("path",{d:"M28,16v6H4V6H16V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V16ZM18,28H14V24h4Z"})),Ss||(Ss=i.createElement("path",{d:"M21 15L16 10.04 17.59 8.47 21 11.85 28.41 4.5 30 6.08 21 15z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ds||(Ds=i.createElement("path",{d:"M28 18H30V28H28zM24 14H26V28H24zM20 22H22V28H20zM22.175 10L23.76 8.7339A9.9522 9.9522 0 0017.89 5.1816 10.0025 10.0025 0 006.17 13.1152 7.5054 7.5054 0 00.0544 21.4087 7.6843 7.6843 0 007.7692 28H16V26H7.6945a5.632 5.632 0 01-5.6023-4.4858 5.5064 5.5064 0 014.4339-6.4307l1.3486-.2441.2139-1.11a8.206 8.206 0 016.7426-6.6426 7.9666 7.9666 0 013.0137.13A7.8037 7.8037 0 0122.175 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ur);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ys||(ys=i.createElement("path",{d:"M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"})),Vs||(Vs=i.createElement("path",{d:"M17 26.17L17 14 15 14 15 26.17 12.41 23.59 11 25 16 30 21 25 19.59 23.59 17 26.17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),As||(As=i.createElement("path",{d:"M28 16v6H4V6H15V4H4A2 2 0 002 6V22a2 2 0 002 2h8v4H8v2H24V28H20V24h8a2 2 0 002-2V16zM18 28H14V24h4zM18 4H30V6H18z"})),Ts||(Ts=i.createElement("path",{d:"M18 8H30V10H18zM18 12H24V14H18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,br);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ws||(Ws=i.createElement("path",{d:"M28,16v6H4V6h7V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V16ZM18,28H14V24h4Z"})),Us||(Us=i.createElement("path",{d:"M18,18h-.01a1,1,0,0,1-.9511-.7253L15.2456,11H11V9h5a1,1,0,0,1,.9615.7252l1.0742,3.7589,3.0088-9.7783A1.0142,1.0142,0,0,1,22,3a.98.98,0,0,1,.9487.6838L24.7207,9H30v2H24a1,1,0,0,1-.9487-.6838l-1.0132-3.04L18.9556,17.2942A1,1,0,0,1,18,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Is||(Is=i.createElement("path",{d:"M24.8008 12.1362a8.8694 8.8694 0 00-.9795-2.5434L30 3.4142 28.5872 2 2 28.5872 3.4142 30l5-5H23.5a6.4974 6.4974 0 001.3008-12.8638zM23.5 23H10.4141L22.3418 11.0723a6.9049 6.9049 0 01.6006 2.0708l.0986.812.8154.0639A4.4975 4.4975 0 0123.5 23zM4.2964 23.4487l1.4313-1.4311A4.4774 4.4774 0 018.144 14.019l.8155-.0639.0991-.812a6.9867 6.9867 0 0110.63-5.0865l1.4431-1.4428A8.9859 8.9859 0 007.2 12.1362 6.4891 6.4891 0 004.2964 23.4487z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bs||(Bs=i.createElement("path",{d:"M28,17v5H4V6H14V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V17ZM18,28H14V24h4Z"})),Os||(Os=i.createElement("path",{d:"M30,10V8H27.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,24,4.1011V2H22V4.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,18.1011,8H16v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,22,13.8989V16h2V13.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,27.8989,10Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,23,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Er);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fs||(Fs=i.createElement("path",{d:"M11 18L12.41 19.41 15 16.83 15 29 17 29 17 16.83 19.59 19.41 21 18 16 13 11 18z"})),qs||(qs=i.createElement("path",{d:"M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xs||(Xs=i.createElement("path",{d:"M25.8289 13.1155A10.02 10.02 0 0016 5.0005V7a8.0233 8.0233 0 017.8649 6.4934l.2591 1.346 1.3488.2441A5.5019 5.5019 0 0124.5076 26H16v2h8.5076a7.5019 7.5019 0 001.3213-14.8845zM8 24H14V26H8zM4 24H6V26H4zM6 20H14V22H6zM2 20H4V22H2zM8 16H14V18H8zM4 16H6V18H4zM10 12H14V14H10zM6 12H8V14H6zM12 8H14V10H12z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cs||(Cs=i.createElement("path",{d:"M2 28H11V30H2zM21 28H30V30H21zM17 26.167L17 17.832 19.586 20.414 21 19 16 14 11 19 12.413 20.415 15 17.832 15 26.167 12.413 23.584 11 25 16 30 21 25 19.586 23.586 17 26.167z"})),Hs||(Hs=i.createElement("path",{d:"M23,16H21V14h2a3,3,0,0,0,0-6c-.0938.0144-.1538.0219-.2153.0263l-.8037.0572L21.7544,7.31a5.9927,5.9927,0,0,0-11.1758-.8655l-.2832.5994-.8423-.0455A3.5008,3.5008,0,0,0,9.5,14H11v2H9.5A5.5,5.5,0,0,1,9.07,5.0166,7.9909,7.9909,0,0,1,23.42,6.0175,5,5,0,0,1,23,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ks||(ks=i.createElement("path",{d:"M16,7h0a7.66,7.66,0,0,1,1.51.15,8,8,0,0,1,6.35,6.34l.26,1.35,1.35.24a5.5,5.5,0,0,1-1,10.92H7.5a5.5,5.5,0,0,1-1-10.92l1.34-.24.26-1.35A8,8,0,0,1,16,7m0-2a10,10,0,0,0-9.83,8.12A7.5,7.5,0,0,0,7.49,28h17a7.5,7.5,0,0,0,1.32-14.88,10,10,0,0,0-7.94-7.94A10.27,10.27,0,0,0,16,5Z"})),Ns||(Ns=i.createElement("path",{d:"M14 24H11a2 2 0 01-2-2V19a2 2 0 012-2h3v2H11v3h3zM21 15V13H19a2 2 0 00-2 2v2H16v2h1v5h2V19h2V17H19V15z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zs||(Zs=i.createElement("path",{d:"M25 11L25 9 17 9 17 23 19 23 19 17 24 17 24 15 19 15 19 11 25 11zM15 23H9a2 2 0 01-2-2V11A2 2 0 019 9h6v2H9V21h6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ys||(Ys=i.createElement("path",{d:"M28 30H23a2.0023 2.0023 0 01-2-2V23a2.0023 2.0023 0 012-2h5a2.0023 2.0023 0 012 2v5A2.0023 2.0023 0 0128 30zm-5-7h-.0012L23 28h5V23zM16 23H11a2.0023 2.0023 0 01-2-2V11a2.0023 2.0023 0 012-2H21a2.0023 2.0023 0 012 2v5H21V11H11V21h5z"})),Ps||(Ps=i.createElement("path",{d:"M16,30H4a2.0023,2.0023,0,0,1-2-2V4A2.0023,2.0023,0,0,1,4,2H28a2.0023,2.0023,0,0,1,2,2V16H28V4H4V28H16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),js||(js=i.createElement("circle",{cx:"9",cy:"20",r:"2"})),Ks||(Ks=i.createElement("path",{d:"M16,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,16,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,16,14Z"})),Gs||(Gs=i.createElement("circle",{cx:"23",cy:"12",r:"2"})),Qs||(Qs=i.createElement("path",{d:"M16,31a.9988.9988,0,0,1-.5039-.1357l-12-7A1.0008,1.0008,0,0,1,3,23V9a.9994.9994,0,0,1,.4961-.8638l12-7a1,1,0,0,1,1.0078,0l12,7L27.4961,9.8638,16,3.1577,5,9.5742V22.4258l11,6.417,11-6.417V15h2v8a1.0008,1.0008,0,0,1-.4961.8643l-12,7A.9988.9988,0,0,1,16,31Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Js||(Js=i.createElement("path",{d:"M32,26V24H29.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,26,20.1011V18H24v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,20.1011,24H18v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,24,29.8989V32h2V29.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,29.8989,26Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,25,28Z"})),$s||($s=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),ea||(ea=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),ia||(ia=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),ta||(ta=i.createElement("path",{d:"M13.0205,28.2715,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L12.0127,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_a||(_a=i.createElement("path",{d:"M30.9763,24.9748l-5.0015,5.0015a3.501,3.501,0,0,1-4.9511-4.9511L22.4383,26.44A1.5,1.5,0,0,0,24.56,28.5617L29.5617,23.56A1.5,1.5,0,0,0,27.44,21.4383l-1.4146-1.4146a3.501,3.501,0,0,1,4.9511,4.9511Z"})),sa||(sa=i.createElement("path",{d:"M20.0252,21.0237l-5.0015,5.0015a3.501,3.501,0,0,0,4.9511,4.9511L18.56,29.5617A1.5,1.5,0,0,1,16.4383,27.44L21.44,22.4383A1.5,1.5,0,0,1,23.5617,24.56l1.4146,1.4146a3.501,3.501,0,0,0-4.9511-4.9511Z"})),aa||(aa=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),na||(na=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),ra||(ra=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),la||(la=i.createElement("path",{d:"M11.3076,27.2725,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L10.3,29Z"})),_)})).propTypes=da;var Ar=!("undefined"===typeof window||!window.document||!window.document.createElement),Tr=function(){var e=0;return function(){return++e}}(),Wr=Ar?i.useLayoutEffect:i.useEffect,Ur=!1;function Ir(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id",t=q((0,i.useState)((function(){return Ur?"".concat(e,"-").concat(Tr()):null})),2),_=t[0],s=t[1];return Wr((function(){null===_&&s("".concat(e,"-").concat(Tr()))}),[Tr]),(0,i.useEffect)((function(){!1===Ur&&(Ur=!0)}),[]),_}var Br={};function Or(e,i){return function(i,t,_){if(void 0!==i[t]){Br[_]&&Br[_][t]||(Br[_]=R(R({},Br[_]),{},A({},t,!0)));for(var s=arguments.length,a=new Array(s>3?s-3:0),n=3;n1&&void 0!==arguments[1]?arguments[1]:{},t=i.key,_=i.which,s=i.keyCode;return"string"===typeof e?e===t:"number"===typeof e?e===_||e===s:e.key&&Array.isArray(t)?-1!==t.indexOf(e.key):e.key===t||e.which===_||e.keyCode===s}Xr.propTypes={as:P().oneOfType([P().func,P().string,P().elementType]),children:P().node.isRequired,dir:P().oneOf(["ltr","rtl","auto"])};var Hr={key:["Escape","Esc"],which:27,keyCode:27},kr=["children","className","iconDescription","open","onHeadingClick","renderExpando","renderToggle","title","disabled"],Nr=function(e){return i.createElement("button",T({type:"button"},e))};function Zr(e){var t,_=e.children,s=e.className;e.iconDescription;var a=e.open,n=void 0!==a&&a,r=e.onHeadingClick,l=e.renderExpando,d=void 0===l?Nr:l,o=e.renderToggle,m=e.title,v=void 0===m?"title":m,c=e.disabled,u=B(e,kr),f=q((0,i.useState)(n),2),b=f[0],p=f[1],g=q((0,i.useState)(n),2),E=g[0],w=g[1],h=q((0,i.useState)(""),2),x=h[0],z=h[1],L=Ir("accordion-item"),M=Z(),R=k()((A(t={},"".concat(M,"--accordion__item"),!0),A(t,"".concat(M,"--accordion__item--active"),b),A(t,"".concat(M,"--accordion__item--").concat(x),x),A(t,"".concat(M,"--accordion__item--disabled"),c),A(t,s,!!s),t)),S=o||d;return n!==E&&(z(b?"collapsing":"expanding"),p(n),w(n)),i.createElement("li",T({className:R},u,{onAnimationEnd:function(e){u.handleAnimationEnd&&u.handleAnimationEnd(e),z("")}}),i.createElement(S,{disabled:c,"aria-controls":L,"aria-expanded":b,className:"".concat(M,"--accordion__heading"),onClick:function(e){var i=!b;z(b?"collapsing":"expanding"),p(i),r&&r({isOpen:i,event:e})},onKeyDown:function(e){b&&Cr(e,Hr)&&p(!1)},type:"button"},i.createElement(yr,{className:"".concat(M,"--accordion__arrow")}),i.createElement(Xr,{as:"div",className:"".concat(M,"--accordion__title")},v)),i.createElement("div",{id:L,className:"".concat(M,"--accordion__content")},_))}Zr.propTypes={children:P().node,className:P().string,disabled:P().bool,onClick:P().func,onHeadingClick:P().func,open:P().bool,renderExpando:Or(P().func),renderToggle:P().func,title:P().node};var Yr=["className","id","labelText","onChange","indeterminate","hideLabel","title"],Pr=i.forwardRef((function(e,t){var _=e.className,s=e.id,a=e.labelText,n=e.onChange,r=e.indeterminate,l=e.hideLabel,d=e.title,o=void 0===d?"":d,m=B(e,Yr),v=Z(),c=k()("".concat(v,"--checkbox-label"),[_]),u=k()("".concat(v,"--checkbox-label-text"),A({},"".concat(v,"--visually-hidden"),l)),f=k()("".concat(v,"--form-item"),"".concat(v,"--checkbox-wrapper"),[_]);return i.createElement("div",{className:f},i.createElement("input",T({},m,{type:"checkbox",onChange:function(e){n(e,{checked:e.target.checked,id:s})},className:"".concat(v,"--checkbox"),id:s,ref:function(e){e&&(e.indeterminate=r),"function"===typeof t?t(e):Object(t)===t&&(t.current=e)}})),i.createElement("label",{htmlFor:s,className:c,title:o||null},i.createElement(Xr,{className:u},a)))}));Pr.propTypes={checked:P().bool,className:P().string,defaultChecked:P().bool,disabled:P().bool,hideLabel:P().bool,id:P().string.isRequired,indeterminate:P().bool,labelText:P().node.isRequired,onChange:P().func,title:P().string},Pr.defaultProps={onChange:function(){},indeterminate:!1},Pr.displayName="Checkbox";var jr=Pr;"undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof t.g?t.g:"undefined"!==typeof self&&self;function Kr(e){if(e.__esModule)return e;var i=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(t){var _=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,_.get?_:{enumerable:!0,get:function(){return e[t]}})})),i}var Gr=function(){if("undefined"!==typeof Map)return Map;function e(e,i){var t=-1;return e.some((function(e,_){return e[0]===i&&(t=_,!0)})),t}return function(){function i(){this.__entries__=[]}return Object.defineProperty(i.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),i.prototype.get=function(i){var t=e(this.__entries__,i),_=this.__entries__[t];return _&&_[1]},i.prototype.set=function(i,t){var _=e(this.__entries__,i);~_?this.__entries__[_][1]=t:this.__entries__.push([i,t])},i.prototype.delete=function(i){var t=this.__entries__,_=e(t,i);~_&&t.splice(_,1)},i.prototype.has=function(i){return!!~e(this.__entries__,i)},i.prototype.clear=function(){this.__entries__.splice(0)},i.prototype.forEach=function(e,i){void 0===i&&(i=null);for(var t=0,_=this.__entries__;t<_.length;t++){var s=_[t];e.call(i,s[1],s[0])}},i}()}(),Qr="undefined"!==typeof window&&"undefined"!==typeof document&&window.document===document,Jr="undefined"!==typeof t.g&&t.g.Math===Math?t.g:"undefined"!==typeof self&&self.Math===Math?self:"undefined"!==typeof window&&window.Math===Math?window:Function("return this")(),$r="function"===typeof requestAnimationFrame?requestAnimationFrame.bind(Jr):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var el=["top","right","bottom","left","width","height","size","weight"],il="undefined"!==typeof MutationObserver,tl=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,i){var t=!1,_=!1,s=0;function a(){t&&(t=!1,e()),_&&r()}function n(){$r(a)}function r(){var e=Date.now();if(t){if(e-s<2)return;_=!0}else t=!0,_=!1,setTimeout(n,i);s=e}return r}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var i=this.observers_,t=i.indexOf(e);~t&&i.splice(t,1),!i.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){Qr&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),il?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){Qr&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var i=e.propertyName,t=void 0===i?"":i;el.some((function(e){return!!~t.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),_l=function(e,i){for(var t=0,_=Object.keys(i);t<_.length;t++){var s=_[t];Object.defineProperty(e,s,{value:i[s],enumerable:!1,writable:!1,configurable:!0})}return e},sl=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||Jr},al=ml(0,0,0,0);function nl(e){return parseFloat(e)||0}function rl(e){for(var i=[],t=1;t0},e}(),fl="undefined"!==typeof WeakMap?new WeakMap:new Gr,bl=function e(i){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var t=tl.getInstance(),_=new ul(i,t,this);fl.set(this,_)};["observe","unobserve","disconnect"].forEach((function(e){bl.prototype[e]=function(){var i;return(i=fl.get(this))[e].apply(i,arguments)}}));var pl="undefined"!==typeof Jr.ResizeObserver?Jr.ResizeObserver:bl;var gl,El=(gl=Kr(e))&&"object"===S(gl)&&"default"in gl?gl.default:gl,wl=i;var hl=function(e){void 0===e&&(e={});var i=wl.useRef(null),t=e.onResize,_=wl.useRef(void 0);_.current=t;var s=wl.useRef(),a=e.ref||i,n=wl.useState({width:void 0,height:void 0}),r=n[0],l=n[1],d=wl.useRef({width:void 0,height:void 0});return wl.useEffect((function(){s.current||(s.current=new El((function(e){if(Array.isArray(e)&&e.length){var i=e[0],t=Math.round(i.contentRect.width),s=Math.round(i.contentRect.height);if(d.current.width!==t||d.current.height!==s){var a={width:t,height:s};_.current?_.current(a):(d.current.width=t,d.current.height=s,l(a))}}})))}),[]),wl.useEffect((function(){if("object"===S(a)&&null!==a&&a.current instanceof Element){var e=a.current;return s.current.observe(e),function(){return s.current.unobserve(e)}}}),[a]),wl.useMemo((function(){return{ref:a,width:r.width,height:r.height}}),[a,r?r.width:null,r?r.height:null])},xl=t(95),zl=t.n(xl),Ll=function(e){return function(i){for(var t=arguments.length,_=new Array(t>1?t-1:0),s=1;s=e.length?{done:!0}:{done:!1,value:e[_++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,n=!0,r=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return n=e.done,e},e:function(e){r=!0,a=e},f:function(){try{n||null==t.return||t.return()}finally{if(r)throw a}}}}(e.childNodes);try{for(t.s();!(i=t.n()).done;){var _=Tl(i.value);if(_)return _}}catch(s){t.e(s)}finally{t.f()}return null}Al.propTypes={children:P().node,className:P().string};var Wl=["align","className","children","label","description","enterDelayMs","leaveDelayMs","defaultOpen"];function Ul(e){var t=e.align,_=void 0===t?"top":t,s=e.className,a=e.children,n=e.label,r=e.description,l=e.enterDelayMs,d=void 0===l?100:l,o=e.leaveDelayMs,m=void 0===o?300:o,v=e.defaultOpen,c=void 0!==v&&v,u=B(e,Wl),f=(0,i.useRef)(null),b=(0,i.useRef)(null),p=function(e){var t=q((0,i.useState)(e),2),_=t[0],s=t[1],a=(0,i.useRef)(null),n=(0,i.useCallback)((function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;clearTimeout(a.current),a.current=null,0!==i?a.current=setTimeout((function(){s(e),a.current=null}),i):s(e)}),[]);return(0,i.useEffect)((function(){return function(){clearTimeout(a.current)}}),[]),[_,n]}(c),g=q(p,2),E=g[0],w=g[1],h=Ir("tooltip"),x=Z(),z=i.Children.only(a),L={onFocus:function(){return w(!0)},onBlur:function(){return w(!1)},onMouseEnter:function(){w(!0,d)}};return n?L["aria-labelledby"]=h:L["aria-describedby"]=h,(0,i.useEffect)((function(){Tl(f.current)||w(!1)})),i.createElement(Vl,T({},u,{align:_,className:k()("".concat(x,"--tooltip"),s),dropShadow:!1,highContrast:!0,onKeyDown:function(e){E&&Cr(e,Hr)&&(e.stopPropagation(),w(!1))},onMouseLeave:function(){w(!1,m)},open:E,ref:f}),i.cloneElement(z,L),i.createElement(Al,{"aria-hidden":"true",className:"".concat(x,"--tooltip-content"),id:h,ref:b,role:"tooltip"},n||r))}Ul.propTypes={align:P().oneOf(["top","top-left","top-right","bottom","bottom-left","bottom-right","left","left-bottom","left-top","right","right-bottom","right-top"]),children:P().node,className:P().string,defaultOpen:P().bool,description:P().node,enterDelayMs:P().number,label:P().node,leaveDelayMs:P().number};var Il=["align","children","defaultOpen","enterDelayMs","kind","label","leaveDelayMs","size"],Bl=i.forwardRef((function(e,t){var _=e.align,s=e.children,a=e.defaultOpen,n=void 0!==a&&a,r=e.enterDelayMs,l=e.kind,d=e.label,o=e.leaveDelayMs,m=e.size,v=void 0===m?"md":m,c=B(e,Il),u=Z();return i.createElement(Ul,{align:_,className:"".concat(u,"--icon-tooltip"),defaultOpen:n,enterDelayMs:r,label:d,leaveDelayMs:o},i.createElement(Sl,T({},c,{kind:l,ref:t,size:v}),s))}));Bl.propTypes={align:P().oneOf(["top","top-left","top-right","bottom","bottom-left","bottom-right","left","right"]),children:P().node,defaultOpen:P().bool,enterDelayMs:P().number,kind:P().oneOf(["primary","secondary","ghost","tertiary"]),label:P().node.isRequired,leaveDelayMs:P().number,size:P().oneOf(["sm","md","lg"])};var Ol,Fl,ql,Xl,Cl,Hl,kl,Nl,Zl,Yl,Pl,jl,Kl,Gl,Ql,Jl,$l,ed,id,td,_d,sd,ad,nd,rd,ld,dd,od,md,vd,cd,ud,fd,bd,pd,gd,Ed,wd,hd,xd,zd,Ld,Md,Rd,Sd,Dd,yd,Vd,Ad,Td,Wd,Ud,Id,Bd,Od,Fd,qd,Xd,Cd,Hd,kd,Nd,Zd,Yd,Pd,jd,Kd,Gd,Qd,Jd,$d,eo,io,to,_o,so,ao,no,ro,lo,oo,mo,vo,co,uo,fo,bo,po,go,Eo,wo,ho,xo,zo,Lo,Mo,Ro,So,Do,yo,Vo,Ao,To,Wo,Uo,Io,Bo,Oo,Fo,qo,Xo,Co,Ho,ko,No,Zo,Yo,Po,jo,Ko,Go,Qo,Jo,$o,em,im,tm,_m,sm,am,nm,rm,lm,dm,om,mm,vm,cm,um,fm,bm,pm,gm,Em,wm,hm,xm,zm,Lm,Mm,Rm,Sm,Dm,ym,Vm,Am,Tm,Wm,Um,Im,Bm,Om,Fm,qm,Xm,Cm,Hm,km,Nm,Zm,Ym,Pm,jm,Km,Gm,Qm,Jm,$m,ev,iv,tv,_v,sv,av,nv,rv,lv,dv,ov,mv,vv,cv,uv,fv,bv,pv,gv,Ev,wv,hv,xv,zv,Lv,Mv,Rv,Sv,Dv,yv,Vv,Av,Tv,Wv,Uv,Iv,Bv,Ov,Fv,qv,Xv,Cv,Hv,kv,Nv,Zv,Yv,Pv,jv,Kv,Gv,Qv,Jv,$v,ec,ic,tc,_c,sc,ac,nc,rc,lc,dc,oc,mc,vc,cc,uc,fc,bc,pc=["children","className","feedback","feedbackTimeout","onAnimationEnd","onClick"];function gc(e){var t,_=e.children,s=e.className,a=e.feedback,n=e.feedbackTimeout,r=e.onAnimationEnd,l=e.onClick,d=B(e,pc),o=q((0,i.useState)(""),2),m=o[0],v=o[1],c=Z(),u=k()(s,"".concat(c,"--copy"),(A(t={},"".concat(c,"--copy-btn--animating"),m),A(t,"".concat(c,"--copy-btn--").concat(m),m),t)),f=(0,i.useCallback)(zl()((function(){v("fade-out")}),n),[n]),b=(0,i.useCallback)((function(){v("fade-in"),f()}),[f]),p=function(e){"hide-feedback"===e.animationName&&v("")};return(0,i.useEffect)((function(){return function(){f.cancel()}}),[f]),L("enable-v11-release")?i.createElement(Bl,T({align:"bottom",className:u,label:m?a:d["aria-label"],onClick:Ll([l,b]),onAnimationEnd:Ll([r,p])},d,{"aria-live":"polite","aria-label":!_&&(m?a:d["aria-label"])||null}),_):i.createElement("button",T({type:"button",className:u,onClick:Ll([l,b]),onAnimationEnd:Ll([r,p])},d,{"aria-live":"polite","aria-label":!_&&(m?a:d["aria-label"])||null}),_,m?a:d["aria-label"],i.createElement("span",{"aria-hidden":"true",className:"".concat(c,"--assistive-text ").concat(c,"--copy-btn__feedback")},a))}gc.propTypes={children:P().node,className:P().string,feedback:P().string,feedbackTimeout:P().number,onAnimationEnd:P().func,onClick:P().func},gc.defaultProps={feedback:"Copied!",feedbackTimeout:2e3,onClick:function(){}};var Ec=["children","size"],wc=["children","size"],hc=["children","size"],xc=["children","size"],zc=["children","size"],Lc=["children","size"],Mc=["children","size"],Rc=["children","size"],Sc=["children","size"],Dc=["children","size"],yc=["children","size"],Vc=["children","size"],Ac=["children","size"],Tc=["children","size"],Wc=["children","size"],Uc=["children","size"],Ic=["children","size"],Bc=["children","size"],Oc=["children","size"],Fc=["children","size"],qc=["children","size"],Xc=["children","size"],Cc=["children","size"],Hc=["children","size"],kc=["children","size"],Nc=["children","size"],Zc=["children","size"],Yc=["children","size"],Pc=["children","size"],jc=["children","size"],Kc=["children","size"],Gc=["children","size"],Qc=["children","size"],Jc=["children","size"],$c=["children","size"],eu=["children","size"],iu=["children","size"],tu=["children","size"],_u=["children","size"],su=["children","size"],au=["children","size"],nu=["children","size"],ru=["children","size"],lu=["children","size"],du=["children","size"],ou=["children","size"],mu=["children","size"],vu=["children","size"],cu=["children","size"],uu=["children","size"],fu=["children","size"],bu=["children","size"],pu=["children","size"],gu=["children","size"],Eu=["children","size"],wu=["children","size"],hu=["children","size"],xu=["children","size"],zu=["children","size"],Lu=["children","size"],Mu=["children","size"],Ru=["children","size"],Su=["children","size"],Du=["children","size"],yu=["children","size"],Vu=["children","size"],Au=["children","size"],Tu=["children","size"],Wu=["children","size"],Uu=["children","size"],Iu=["children","size"],Bu=["children","size"],Ou=["children","size"],Fu=["children","size"],qu=["children","size"],Xu=["children","size"],Cu=["children","size"],Hu=["children","size"],ku=["children","size"],Nu=["children","size"],Zu=["children","size"],Yu=["children","size"],Pu=["children","size"],ju=["children","size"],Ku=["children","size"],Gu=["children","size"],Qu=["children","size"],Ju=["children","size"],$u=["children","size"],ef=["children","size"],tf=["children","size"],_f=["children","size"],sf=["children","size"],af=["children","size"],nf=["children","size"],rf=["children","size"],lf=["children","size"],df=["children","size"],of=["children","size"],mf=["children","size"],vf=["children","size"],cf=["children","size"],uf=["children","size"],ff=["children","size"],bf=["children","size"],pf=["children","size"],gf=["children","size"],Ef=["children","size"],wf=["children","size"],hf=["children","size"],xf=["children","size"],zf=["children","size"],Lf=["children","size"],Mf=["children","size"],Rf=["children","size"],Sf=["children","size"],Df=["children","size"],yf=["children","size"],Vf=["children","size"],Af=["children","size"],Tf=["children","size"],Wf=["children","size"],Uf=["children","size"],If=["children","size"],Bf=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ec);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ol||(Ol=i.createElement("path",{d:"M29,26a2.97,2.97,0,0,0-1.8551.6607L25,25.4224V23.8157a3,3,0,1,0-2,0v1.6067l-2.1449,1.2383A2.97,2.97,0,0,0,19,26a3.02,3.02,0,1,0,2.9254,2.3525L24,27.1548l2.0746,1.1977A2.9978,2.9978,0,1,0,29,26ZM19,30a1,1,0,1,1,1-1A1.0006,1.0006,0,0,1,19,30Zm5-10a1,1,0,1,1-1,1A1.0009,1.0009,0,0,1,24,20Zm5,10a1,1,0,1,1,1-1A1.0006,1.0006,0,0,1,29,30Z"})),Fl||(Fl=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),ql||(ql=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),Xl||(Xl=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),Cl||(Cl=i.createElement("path",{d:"M13.0205,28.2715,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L12.0127,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hl||(Hl=i.createElement("path",{d:"M25.8218,10.124a9.9991,9.9991,0,0,0-19.6435,0A7.4964,7.4964,0,0,0,7.5,25H8V23H7.5a5.4961,5.4961,0,0,1-.3769-10.9795l.8364-.0571.09-.8335a7.9979,7.9979,0,0,1,15.9013,0l.09.8335.8364.0571A5.4961,5.4961,0,0,1,24.5,23H24v2h.5a7.4964,7.4964,0,0,0,1.3218-14.876Z"})),kl||(kl=i.createElement("path",{d:"M23,22V20H20.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,17,16.1011V14H15v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,11.1011,20H9v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,15,25.8989V28h2V25.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,20.8989,22Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,16,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nl||(Nl=i.createElement("path",{d:"M30.0005,15.5005a6.5324,6.5324,0,0,0-5.1992-6.3638,8.9943,8.9943,0,0,0-17.6006,0,6.5321,6.5321,0,0,0-5.2,6.3638,6.4543,6.4543,0,0,0,1.6887,4.35A5.9829,5.9829,0,0,0,8,30H19a5.9764,5.9764,0,0,0,5.6094-8.1016A6.5051,6.5051,0,0,0,30.0005,15.5005ZM19,28H8a3.9925,3.9925,0,0,1-.6731-7.9292L7.99,19.958l.1458-.6562a5.496,5.496,0,0,1,10.7294,0l.1458.6562.6626.1128A3.9925,3.9925,0,0,1,19,28Zm4.5-8h-.0554a5.9562,5.9562,0,0,0-2.7959-1.7564,7.4952,7.4952,0,0,0-14.2984,0,5.9877,5.9877,0,0,0-1.0315.4073A4.4446,4.4446,0,0,1,4,15.5005a4.5171,4.5171,0,0,1,4.144-4.481l.8155-.0639.0991-.812a6.9938,6.9938,0,0,1,13.8838,0l.0986.812.8154.0639a4.4975,4.4975,0,0,1-.3564,8.981Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zl||(Zl=i.createElement("path",{d:"M20 17V15a2 2 0 00-2-2H10a2 2 0 00-2 2v2a2 2 0 002 2h8A2 2 0 0020 17zM10 15h8v2H10zM23.42 24.48A2 2 0 0021 23.06l-7.73 2.07a2 2 0 00-1.42 2.44h0l.52 1.93A2 2 0 0014.27 31a3 3 0 00.52-.07l7.73-2.07h0a2 2 0 001.41-2.45zM14.27 29l-.51-1.94L21.48 25 22 26.92zM13.24 6.86L21 8.93h0a2.24 2.24 0 00.51.07 2 2 0 001.94-1.48L24 5.58a2 2 0 00-1.41-2.45L14.79 1.06a2 2 0 00-2.45 1.41h0l-.52 1.93a2 2 0 001.42 2.44zm1-3.86L22 5.07 21.48 7 13.76 4.93zM14 21H16V23H14zM14 9H16V11H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yl||(Yl=i.createElement("path",{d:"M31 16L24 23 22.59 21.59 28.17 16 22.59 10.41 24 9 31 16zM1 16L8 9 9.41 10.41 3.83 16 9.41 21.59 8 23 1 16z"})),Pl||(Pl=i.createElement("path",{d:"M5.91 15H26.080000000000002V17H5.91z",transform:"rotate(-75 15.996 16)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jl||(jl=i.createElement("path",{d:"M17.713 13.471L19.576 6.518 17.645 6 16.08 11.838 17.713 13.471zM24.207 19.965L25.621 21.379 31 16 24 9 22.586 10.414 28.172 16 24.207 19.965zM30 28.586L3.414 2 2 3.414 7.793 9.207 1 16 8 23 9.414 21.586 3.828 16 9.207 10.621 14.884 16.298 12.423 25.482 14.355 26 16.517 17.931 28.586 30 30 28.586z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kl||(Kl=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM30 10L24 4 22.586 5.414 27.172 10 22.586 14.586 24 16 30 10z"})),Gl||(Gl=i.createElement("path",{d:"M8.944 9.001H24.974000000000004V11.001H8.944z",transform:"rotate(-74.995 16.96 10)"})),Ql||(Ql=i.createElement("path",{d:"M4 10L10 4 11.414 5.414 6.828 10 11.414 14.586 10 16 4 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jl||(Jl=i.createElement("circle",{cx:"25",cy:"20",r:"1"})),$l||($l=i.createElement("path",{d:"M19.4141 30H15V25.5857l5.0337-5.0337A4.6069 4.6069 0 0120 20a5 5 0 114.4478 4.9663zM17 28h1.5859l5.2061-5.2063.5395.1238a3.0351 3.0351 0 10-2.249-2.2488l.1236.5393L17 26.4143zM6 8H8V16H6zM2 8H4V16H2zM18 8H20V14H18zM14 16H12a2 2 0 01-2-2V10a2 2 0 012-2h2a2 2 0 012 2v4A2 2 0 0114 16zm-2-2h2V10H12zM2 18H4V26H2zM14 18H16V22H14zM10 26H8a2 2 0 01-2-2V20a2 2 0 012-2h2a2 2 0 012 2v4A2 2 0 0110 26zM8 24h2V20H8zM2 2H4V6H2zM14 2H16V6H14zM18 2H20V6H18zM10 6H8A2 2 0 016 4V2H8V4h2V2h2V4A2 2 0 0110 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ed||(ed=i.createElement("path",{d:"M30,13A11,11,0,0,0,19,2H11a9,9,0,0,0-9,9v3a5,5,0,0,0,5,5H8.1A5,5,0,0,0,13,23h1.38l4,7,1.73-1-4-6.89A2,2,0,0,0,14.38,21H13a3,3,0,0,1,0-6h1V13H13a5,5,0,0,0-4.9,4H7a3,3,0,0,1-3-3V12H6A3,3,0,0,0,9,9V8H7V9a1,1,0,0,1-1,1H4.08A7,7,0,0,1,11,4h6V6a1,1,0,0,1-1,1H14V9h2a3,3,0,0,0,3-3V4a9,9,0,0,1,8.05,5H26a3,3,0,0,0-3,3v1h2V12a1,1,0,0,1,1-1h1.77A8.76,8.76,0,0,1,28,13v1a5,5,0,0,1-5,5H20v2h3a7,7,0,0,0,3-.68V21a3,3,0,0,1-3,3H22v2h1a5,5,0,0,0,5-5V18.89A7,7,0,0,0,30,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),id||(id=i.createElement("path",{d:"M6 21V20H4v1a7 7 0 007 7h3V26H11A5 5 0 016 21zM24 11v1h2V11a7 7 0 00-7-7H16V6h3A5 5 0 0124 11zM11 11H5a3 3 0 00-3 3v2H4V14a1 1 0 011-1h6a1 1 0 011 1v2h2V14A3 3 0 0011 11zM8 10A4 4 0 104 6 4 4 0 008 10zM8 4A2 2 0 116 6 2 2 0 018 4zM27 25H21a3 3 0 00-3 3v2h2V28a1 1 0 011-1h6a1 1 0 011 1v2h2V28A3 3 0 0027 25zM20 20a4 4 0 104-4A4 4 0 0020 20zm6 0a2 2 0 11-2-2A2 2 0 0126 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),td||(td=i.createElement("path",{d:"M30,15H28V7H13V5H28a2.0023,2.0023,0,0,1,2,2Z"})),_d||(_d=i.createElement("path",{d:"M25,20H23V12H8V10H23a2.0023,2.0023,0,0,1,2,2Z"})),sd||(sd=i.createElement("path",{d:"M18,27H4a2.0023,2.0023,0,0,1-2-2V17a2.0023,2.0023,0,0,1,2-2H18a2.0023,2.0023,0,0,1,2,2v8A2.0023,2.0023,0,0,1,18,27ZM4,17v8H18.0012L18,17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ad||(ad=i.createElement("path",{d:"M14 25H28V27H14zM7.17 26L4.59 28.58 6 30 10 26 6 22 4.58 23.41 7.17 26zM14 15H28V17H14zM7.17 16L4.59 18.58 6 20 10 16 6 12 4.58 13.41 7.17 16zM14 5H28V7H14zM7.17 6L4.59 8.58 6 10 10 6 6 2 4.58 3.41 7.17 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ac);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nd||(nd=i.createElement("circle",{cx:"10",cy:"12",r:"2"})),rd||(rd=i.createElement("circle",{cx:"16",cy:"9",r:"2"})),ld||(ld=i.createElement("circle",{cx:"22",cy:"12",r:"2"})),dd||(dd=i.createElement("circle",{cx:"23",cy:"18",r:"2"})),od||(od=i.createElement("circle",{cx:"19",cy:"23",r:"2"})),md||(md=i.createElement("path",{d:"M16.54,2A14,14,0,0,0,2,16a4.82,4.82,0,0,0,6.09,4.65l1.12-.31A3,3,0,0,1,13,23.24V27a3,3,0,0,0,3,3A14,14,0,0,0,30,15.46,14.05,14.05,0,0,0,16.54,2Zm8.11,22.31A11.93,11.93,0,0,1,16,28a1,1,0,0,1-1-1V23.24a5,5,0,0,0-5-5,5.07,5.07,0,0,0-1.33.18l-1.12.31A2.82,2.82,0,0,1,4,16,12,12,0,0,1,16.47,4,12.18,12.18,0,0,1,28,15.53,11.89,11.89,0,0,1,24.65,24.32Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vd||(vd=i.createElement("path",{d:"M26,4H6A2.0025,2.0025,0,0,0,4,6V26a2.0025,2.0025,0,0,0,2,2H26a2.0025,2.0025,0,0,0,2-2V6A2.0025,2.0025,0,0,0,26,4ZM6,26,26,6V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cd||(cd=i.createElement("path",{d:"M24 4H26V28H24zM18 6V26H14V6h4m0-2H14a2 2 0 00-2 2V26a2 2 0 002 2h4a2 2 0 002-2V6a2 2 0 00-2-2zM6 4H8V28H6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ud||(ud=i.createElement("path",{d:"M30 3.41L28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41z"})),fd||(fd=i.createElement("path",{d:"M24 14V28H18V6H16V28a2.0023 2.0023 0 002 2h6a2.0023 2.0023 0 002-2V14zM10 30H4a2.0021 2.0021 0 01-2-2V8A2.0021 2.0021 0 014 6h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0110 30zM4 8V28h6V8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ic);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bd||(bd=i.createElement("path",{d:"M28 30H22a2.0021 2.0021 0 01-2-2V10a2.0021 2.0021 0 012-2h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0128 30zM22 10V28h6V10zM16 9L21.586 3.414 20.172 2 16 6.172 11.828 2 10.414 3.414 16 9zM10 30H4a2.0021 2.0021 0 01-2-2V10A2.0021 2.0021 0 014 8h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0110 30zM4 10V28h6V10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pd||(pd=i.createElement("path",{d:"M30,10V2H22V5H17a2.0023,2.0023,0,0,0-2,2v8H10V12H2v8h8V17h5v8a2.0023,2.0023,0,0,0,2,2h5v3h8V22H22v3H17V17h5v3h8V12H22v3H17V7h5v3ZM8,18H4V14H8Zm16,6h4v4H24Zm0-10h4v4H24ZM24,4h4V8H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gd||(gd=i.createElement("path",{d:"M30,15H21.91A5.9925,5.9925,0,0,0,10.09,15H2v2h8.09A5.9925,5.9925,0,0,0,21.91,17H30ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ed||(Ed=i.createElement("path",{d:"M28 17H18a2.0025 2.0025 0 00-2 2v6a2.0025 2.0025 0 002 2h4V25H18V19H28v6H25.4648l-2.5937 3.8906L24.5352 30l2-3H28a2.0025 2.0025 0 002-2V19A2.0025 2.0025 0 0028 17zM8.6667 24.1086l.8614-.8615a.8334.8334 0 01.8988-.1844l1.0493.42A.8334.8334 0 0112 24.2561v1.9082a.8334.8334 0 01-.8786.8341c-7.3546-.4578-8.84-6.6863-9.1158-9.0723A.8316.8316 0 012.8343 17H4.7085a.8335.8335 0 01.7737.5238l.42 1.0493a.8332.8332 0 01-.1845.8988l-.8614.8614A4.5267 4.5267 0 008.6667 24.1086zM21 9H28V11H21zM21 5H30V7H21zM17 6L14 8.2V6a2.0024 2.0024 0 00-2-2H4A2.0024 2.0024 0 002 6v6a2.0024 2.0024 0 002 2h8a2.0024 2.0024 0 002-2V9.8L17 12zM4 12V6h8v6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wd||(wd=i.createElement("path",{d:"M28,6H18V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V24a2,2,0,0,0,2,2H14v2a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6ZM4,15h6.17L7.59,17.59,9,19l5-5L9,9,7.59,10.41,10.17,13H4V4H16V24H4ZM16,28V26a2,2,0,0,0,2-2V8H28v9H21.83l2.58-2.59L23,13l-5,5,5,5,1.41-1.41L21.83,19H28v9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hd||(hd=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12,12,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z"})),xd||(xd=i.createElement("path",{d:"M23,10.41,21.59,9l-4.3,4.3a3,3,0,0,0-4,4L9,21.59,10.41,23l4.3-4.3a3,3,0,0,0,4-4ZM17,16a1,1,0,1,1-1-1A1,1,0,0,1,17,16Z"})),zd||(zd=i.createElement("circle",{cx:"16",cy:"7.5",r:"1.5"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ld||(Ld=i.createElement("path",{d:"M25.82,10H30V8H25.82a3,3,0,0,0-5.64,0H13V5H5V8H2v2H5v3h8V10h7.18A3,3,0,0,0,22,11.82v7.32A4,4,0,0,0,19.14,22H2v2H19.14a4,4,0,0,0,7.72,0H30V22H26.86A4,4,0,0,0,24,19.14V11.82A3,3,0,0,0,25.82,10ZM11,11H7V7h4ZM25,23a2,2,0,1,1-2-2A2,2,0,0,1,25,23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Md||(Md=i.createElement("path",{d:"M20.8851,19.4711a5.9609,5.9609,0,0,0,0-6.9422L23,10.4141l1.293,1.2929a.9995.9995,0,0,0,1.414,0l4-4a.9994.9994,0,0,0,0-1.414l-4-4a.9994.9994,0,0,0-1.414,0l-4,4a.9994.9994,0,0,0,0,1.414L21.5859,9l-2.1148,2.1149a5.9609,5.9609,0,0,0-6.9422,0L10,8.5859V2H2v8H8.5859l2.529,2.5289a5.9609,5.9609,0,0,0,0,6.9422L9,21.5859,7.707,20.293a.9994.9994,0,0,0-1.414,0l-4,4a.9994.9994,0,0,0,0,1.414l4,4a.9995.9995,0,0,0,1.414,0l4-4a.9994.9994,0,0,0,0-1.414L10.4141,23l2.1148-2.1149a5.9609,5.9609,0,0,0,6.9422,0L22,23.4141V30h8V22H23.4141ZM25,4.4141,27.5859,7,25,9.5859,22.4141,7ZM7,27.5859,4.4141,25,7,22.4141,9.5859,25ZM8,8H4V4H8Zm4,8a4,4,0,1,1,4,4A4.0045,4.0045,0,0,1,12,16Zm12,8h4v4H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rd||(Rd=i.createElement("path",{d:"M10.343 10.343H21.657V21.657H10.343z",transform:"rotate(-45 16 16)"})),Sd||(Sd=i.createElement("path",{d:"M29.3906,14.5269,17.4731,2.6094a2.0852,2.0852,0,0,0-2.9462,0L2.6094,14.5269a2.0852,2.0852,0,0,0,0,2.9462L14.5269,29.3906a2.0852,2.0852,0,0,0,2.9462,0L29.3906,17.4731a2.0852,2.0852,0,0,0,0-2.9462ZM16,28.0356,3.9646,16,16,3.9644,28.0356,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dd||(Dd=i.createElement("path",{d:"M10.343 10.343H21.657V21.657H10.343z",transform:"rotate(-45 16 16)"})),yd||(yd=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12.0136,12.0136,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vd||(Vd=i.createElement("path",{d:"M23,16a7,7,0,0,0-4.18,1.39L14.6,13.17A6.86,6.86,0,0,0,16,9a7,7,0,1,0-2.81,5.59l4.21,4.22A7,7,0,1,0,23,16ZM4,9a5,5,0,1,1,5,5A5,5,0,0,1,4,9Z",transform:"translate(0 .01)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ad||(Ad=i.createElement("path",{d:"M28,7H13.8281l3.586-3.5859L16,2,10,8l6,6,1.4141-1.4141L13.8281,9H28V20H11.8989A5.0145,5.0145,0,0,0,8,16.1011V2H6V16.1011a5,5,0,0,0,0,9.7978V30H8V25.8989A5.0145,5.0145,0,0,0,11.8989,22H28a2.0023,2.0023,0,0,0,2-2V9A2.0023,2.0023,0,0,0,28,7ZM7,24a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,7,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Td||(Td=i.createElement("path",{d:"M24,10l-1.4141,1.4141L26.1719,15H11.8989A5.0145,5.0145,0,0,0,8,11.1011V2H6v9.1011a5,5,0,0,0,0,9.7978V30H8V20.8989A5.0145,5.0145,0,0,0,11.8989,17h14.273l-3.586,3.5859L24,22l6-6ZM7,19a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,7,19Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wd||(Wd=i.createElement("path",{d:"M28 2H30V30H28zM20 10l-1.4141 1.4141L22.1719 15H11.8989a5 5 0 100 2h10.273l-3.586 3.5859L20 22l6-6zM7 19a3 3 0 113-3A3.0033 3.0033 0 017 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ud||(Ud=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM30 14L21.83 14 24.41 16.59 23 18 18 13 23 8 24.41 9.41 21.83 12 30 12 30 14z"})),Id||(Id=i.createElement("path",{d:"M28,20v8H22V20H20v8H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bd||(Bd=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM18 14L26.17 14 23.59 16.59 25 18 30 13 25 8 23.59 9.41 26.17 12 18 12 18 14z"})),Od||(Od=i.createElement("path",{d:"M28,20v8H22V20H20v8H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fd||(Fd=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM30 22L21.83 22 24.41 24.59 23 26 18 21 23 16 24.41 17.41 21.83 20 30 20 30 22zM19 12L27.17 12 24.59 14.59 26 16 31 11 26 6 24.59 7.41 27.17 10 19 10 19 12z"})),qd||(qd=i.createElement("path",{d:"M28,26v2H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xd||(Xd=i.createElement("path",{d:"M15 12H17V30H15zM11.33 18.22a7 7 0 010-10.44l1.34 1.49a5 5 0 000 7.46zM20.67 18.22l-1.34-1.49a5 5 0 000-7.46l1.34-1.49a7 7 0 010 10.44z"})),Cd||(Cd=i.createElement("path",{d:"M8.4 21.8a11 11 0 010-17.6L9.6 5.8a9 9 0 000 14.4zM23.6 21.8l-1.2-1.6a9 9 0 000-14.4l1.2-1.6a11 11 0 010 17.6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$c);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hd||(Hd=i.createElement("path",{d:"M26,13a8.9089,8.9089,0,0,1-2.5249,6.2339l1.4133,1.4131A10.9795,10.9795,0,0,0,23.6006,4.2l-1.2012,1.6A8.932,8.932,0,0,1,26,13Z"})),kd||(kd=i.createElement("path",{d:"M21 13a5.0022 5.0022 0 01-.9023 2.8564l1.4277 1.4278a6.9831 6.9831 0 00-.8584-9.5015l-1.334 1.49A5.0077 5.0077 0 0121 13zM30 28.5859L3.4143 2 2 3.4141l3.71 3.71A10.9824 10.9824 0 008.3994 21.8008l1.2012-1.6A8.9678 8.9678 0 017.1714 8.5854l2.1963 2.1963a6.9664 6.9664 0 001.9648 7.4351l1.334-1.49A5.0072 5.0072 0 0111 13a4.8854 4.8854 0 01.0393-.5464L15 16.4141V30h2V18.4141L28.5857 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,eu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nd||(Nd=i.createElement("path",{d:"M29.34 16.06a1.0007 1.0007 0 00-1.1084.3L24.46 20.8857l-5.4355-.9882-3.602-8.9512A3.014 3.014 0 0012.6138 9h-4.06A3.0018 3.0018 0 007.01 9.4277L2 12.4336v6.4009l5 .9092V30H9V20.1074l3.5652.648L14 24.2V30h2V23.8l-1.0911-2.6182L22.99 22.6509 18.2319 28.36A1 1 0 0019 30H29a1 1 0 001-1V17A1 1 0 0029.34 16.06zM4 17.1655V13.5664l3-1.8v5.9448zm5 .9092V11h3.6138a1.0141 1.0141 0 01.9453.6709l3.14 7.8037zM28 28H21.1353L28 19.7617zM12.5 8A3.5 3.5 0 1116 4.5 3.5042 3.5042 0 0112.5 8zm0-5A1.5 1.5 0 1014 4.5 1.5017 1.5017 0 0012.5 3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,iu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zd||(Zd=i.createElement("path",{d:"M17,13V6H8V22H24V13ZM10,8h5v5H10Zm0,7h5v5H10Zm12,5H17V15h5Z"})),Yd||(Yd=i.createElement("path",{d:"M28 11H19V2h9zM21 9h5V4H21zM28 20H26v2h2v6H4V22H6V20H4a2.0024 2.0024 0 00-2 2v6a2.0024 2.0024 0 002 2H28a2.0024 2.0024 0 002-2V22A2.0024 2.0024 0 0028 20z"})),Pd||(Pd=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jd||(jd=i.createElement("path",{d:"M27,22V17a2.0023,2.0023,0,0,0-2-2H17V10h3a2.0023,2.0023,0,0,0,2-2V4a2.0023,2.0023,0,0,0-2-2H12a2.0023,2.0023,0,0,0-2,2V8a2.0023,2.0023,0,0,0,2,2h3v5H7a2.0023,2.0023,0,0,0-2,2v5H2v8h8V22H7V17h8v5H12v8h8V22H17V17h8v5H22v8h8V22ZM12,4h8V8H12ZM8,28H4V24H8Zm10,0H14V24h4Zm10,0H24V24h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_u);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kd||(Kd=i.createElement("path",{d:"M28,12H20V4h8Zm-6-2h4V6H22Z"})),Gd||(Gd=i.createElement("path",{d:"M17,15V9H9V23H23V15Zm-6-4h4v4H11Zm4,10H11V17h4Zm6,0H17V17h4Z"})),Qd||(Qd=i.createElement("path",{d:"M26,28H6a2.0023,2.0023,0,0,1-2-2V6A2.0023,2.0023,0,0,1,6,4H16V6H6V26H26V16h2V26A2.0023,2.0023,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,su);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jd||(Jd=i.createElement("circle",{cx:"21",cy:"21",r:"2"})),$d||($d=i.createElement("circle",{cx:"7",cy:"7",r:"2"})),eo||(eo=i.createElement("path",{d:"M27,31a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,27,31Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,27,25Z"})),io||(io=i.createElement("path",{d:"M30,16A14.0412,14.0412,0,0,0,16,2,13.0426,13.0426,0,0,0,9.2,3.8l1.1,1.7a24.4254,24.4254,0,0,1,2.4-1A25.1349,25.1349,0,0,0,10,15H4a11.1489,11.1489,0,0,1,1.4-4.7L3.9,9A13.8418,13.8418,0,0,0,2,16,13.9983,13.9983,0,0,0,16,30a13.3656,13.3656,0,0,0,5.2-1l-.6-1.9a11.4416,11.4416,0,0,1-5.2.9h0A21.0713,21.0713,0,0,1,12,17H29.9A3.4019,3.4019,0,0,0,30,16ZM12.8,27.6h0a13.02,13.02,0,0,1-5.3-3.1A12.5053,12.5053,0,0,1,4,17h6A25.0022,25.0022,0,0,0,12.8,27.6ZM12,15A21.4461,21.4461,0,0,1,15.3,4h1.4A21.4461,21.4461,0,0,1,20,15Zm10,0A23.2777,23.2777,0,0,0,19.2,4.4,12.0919,12.0919,0,0,1,27.9,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,au);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),to||(to=i.createElement("circle",{cx:"16",cy:"19",r:"2"})),_o||(_o=i.createElement("path",{d:"M23.7769,18.4785A8.64,8.64,0,0,0,16,13a8.64,8.64,0,0,0-7.7769,5.4785L8,19l.2231.5215A8.64,8.64,0,0,0,16,25a8.64,8.64,0,0,0,7.7769-5.4785L24,19ZM16,23a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,23Z"})),so||(so=i.createElement("path",{d:"M27,3H5A2,2,0,0,0,3,5V27a2,2,0,0,0,2,2H27a2,2,0,0,0,2-2V5A2,2,0,0,0,27,3ZM5,5H27V9H5ZM5,27V11H27V27Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ao||(ao=i.createElement("path",{d:"M10 28a1 1 0 01-1-1V5a1 1 0 011.501-.8652l19 11a1 1 0 010 1.73l-19 11A.9975.9975 0 0110 28zM11 6.7344V25.2656L27 16zM4 4H6V28H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ru);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),no||(no=i.createElement("path",{d:"M10 28a1 1 0 01-1-1V5a1 1 0 011.501-.8652l19 11a1 1 0 010 1.73l-19 11A.9975.9975 0 0110 28zM4 4H6V28H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ro||(ro=i.createElement("path",{d:"M7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.526 11.526 0 0123 25.7zM27.4 19.7l1.9.6A15.4747 15.4747 0 0030 16H28A11.4756 11.4756 0 0127.4 19.7zM29.2 11.6a14.4029 14.4029 0 00-2-3.9L25.6 8.9a12.8867 12.8867 0 011.7 3.3zM24.1 4.6a14.4029 14.4029 0 00-3.9-2l-.6 1.9a12.8867 12.8867 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.4756 11.4756 0 0116 28v2A21.4206 21.4206 0 0020.3 29.3zM15.4023 24.248a11.9488 11.9488 0 00-1.7182-3.3354L15.2974 19.73a13.9486 13.9486 0 012.0044 3.893zM11.02 18.2668a11.9215 11.9215 0 00-3.3467-1.6943l.6114-1.9043a13.9242 13.9242 0 013.9072 1.978z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,du);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lo||(lo=i.createElement("path",{d:"M16 30V28A12.0021 12.0021 0 0019.6924 4.5786l.6152-1.9033A14.0022 14.0022 0 0116 30zM7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7z"})),oo||(oo=i.createElement("path",{d:"M15.4023 24.248a11.9488 11.9488 0 00-1.7182-3.3354L15.2974 19.73a13.9486 13.9486 0 012.0044 3.893zM11.02 18.2668a11.9215 11.9215 0 00-3.3467-1.6943l.6114-1.9043a13.9242 13.9242 0 013.9072 1.978z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ou);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mo||(mo=i.createElement("path",{d:"M7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM2.7 20.4a14.4029 14.4029 0 002 3.9l1.6-1.2a12.8867 12.8867 0 01-1.7-3.3zM7.8 27.3a14.4029 14.4029 0 003.9 2l.6-1.9A12.8867 12.8867 0 019 25.7zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.526 11.526 0 0123 25.7zM27.4 19.7l1.9.6A15.4747 15.4747 0 0030 16H28A11.4756 11.4756 0 0127.4 19.7zM29.2 11.6a14.4029 14.4029 0 00-2-3.9L25.6 8.9a12.8867 12.8867 0 011.7 3.3zM24.1 4.6a14.4029 14.4029 0 00-3.9-2l-.6 1.9a12.8867 12.8867 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.4756 11.4756 0 0116 28v2A21.4206 21.4206 0 0020.3 29.3zM16 26A10 10 0 1126 16 10.0115 10.0115 0 0116 26zM16 8a8 8 0 108 8A8.0092 8.0092 0 0016 8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vo||(vo=i.createElement("path",{d:"M29.37,11.84a13.6,13.6,0,0,0-1.06-2.51A14.17,14.17,0,0,0,25.9,6.1a14,14,0,1,0,0,19.8,14.17,14.17,0,0,0,2.41-3.23,13.6,13.6,0,0,0,1.06-2.51,14,14,0,0,0,0-8.32ZM4,16A12,12,0,0,1,16,4V28A12,12,0,0,1,4,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),co||(co=i.createElement("path",{d:"M26.5 12H19a4 4 0 010-8h.0835A4.7864 4.7864 0 0123 2a4.9816 4.9816 0 014.6543 3.2034A3.4667 3.4667 0 0130 8.5 3.5041 3.5041 0 0126.5 12zM19 6a2 2 0 000 4h7.5A1.5017 1.5017 0 0028 8.5a1.4855 1.4855 0 00-1.2778-1.4739L26.061 6.927l-.1616-.6487a2.9568 2.9568 0 00-5.4873-.7121L20.1143 6zM23 14l-5 5 1.4141 1.4141L22 17.8325V24H16v2h6a2.0025 2.0025 0 002-2V17.8325l2.5874 2.583L28 19zM2 20H12V22H2zM2 24H12V26H2zM2 28H12V30H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uo||(uo=i.createElement("circle",{cx:"10",cy:"21",r:"2"})),fo||(fo=i.createElement("circle",{cx:"23",cy:"20",r:"2"})),bo||(bo=i.createElement("circle",{cx:"13",cy:"10",r:"2"})),po||(po=i.createElement("circle",{cx:"14",cy:"15",r:"1"})),go||(go=i.createElement("circle",{cx:"23",cy:"5",r:"2"})),Eo||(Eo=i.createElement("circle",{cx:"29",cy:"3",r:"1"})),wo||(wo=i.createElement("circle",{cx:"16",cy:"23",r:"1"})),ho||(ho=i.createElement("path",{d:"M16,30C8.3,30,2,23.7,2,16S8.3,2,16,2c0.1,0,0.2,0,0.3,0l1.4,0.1l-0.3,1.2c-0.1,0.4-0.2,0.9-0.2,1.3c0,2.8,2.2,5,5,5 c1,0,2-0.3,2.9-0.9l1.3,1.5c-0.4,0.4-0.6,0.9-0.6,1.4c0,1.3,1.3,2.4,2.7,1.9l1.2-0.5l0.2,1.3C30,14.9,30,15.5,30,16 C30,23.7,23.7,30,16,30z M15.3,4C9,4.4,4,9.6,4,16c0,6.6,5.4,12,12,12s12-5.4,12-12c0-0.1,0-0.3,0-0.4c-2.3,0.1-4.2-1.7-4.2-4 c0-0.1,0-0.1,0-0.2c-0.5,0.1-1,0.2-1.6,0.2c-3.9,0-7-3.1-7-7C15.2,4.4,15.2,4.2,15.3,4z"})),_)})).propTypes=da;var Of=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xo||(xo=i.createElement("path",{d:"M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"})),zo||(zo=i.createElement("path",{d:"M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z"})),_)}));Of.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lo||(Lo=i.createElement("path",{d:"M27.4,14.7l-6.1-6.1C21,8.2,20.5,8,20,8h-8c-1.1,0-2,0.9-2,2v18c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V16.1 C28,15.6,27.8,15.1,27.4,14.7z M20,10l5.9,6H20V10z M12,28V10h6v6c0,1.1,0.9,2,2,2h6l0,10H12z"})),Mo||(Mo=i.createElement("path",{d:"M6,18H4V4c0-1.1,0.9-2,2-2h14v2H6V18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ro||(Ro=i.createElement("path",{d:"M11.9474,19a4.9476,4.9476,0,0,1-3.4991-8.4465l5.1053-5.1043a4.9482,4.9482,0,0,1,6.9981,6.9976l-.5523.5526-1.4158-1.4129.5577-.5579a2.95,2.95,0,0,0-.0039-4.1653,3.02,3.02,0,0,0-4.17,0l-5.1047,5.104a2.9474,2.9474,0,0,0,0,4.1692,3.02,3.02,0,0,0,4.17,0l1.4143,1.4145A4.9176,4.9176,0,0,1,11.9474,19Z"})),So||(So=i.createElement("path",{d:"M19.9474,17a4.9476,4.9476,0,0,1-3.4991-8.4465l.5526-.5526,1.4143,1.4146-.5526.5523a2.9476,2.9476,0,0,0,0,4.1689,3.02,3.02,0,0,0,4.17,0c.26-.26,4.7293-4.7293,5.1053-5.1045a2.951,2.951,0,0,0,0-4.1687,3.02,3.02,0,0,0-4.17,0L21.5536,3.449a4.9483,4.9483,0,0,1,6.9981,6.9978c-.3765.376-4.844,4.8428-5.1038,5.1035A4.9193,4.9193,0,0,1,19.9474,17Z"})),Do||(Do=i.createElement("path",{d:"M24,30H4a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,4,6H8V8H4V28H24V18h2V28A2.0021,2.0021,0,0,1,24,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yo||(yo=i.createElement("path",{d:"M23,16c-.3374,0-.67.02-1,.0508V16C22,8.115,19.0435,2,16.5,2S11,8.115,11,16v5H6v3a6.0067,6.0067,0,0,0,6,6h3A11.0125,11.0125,0,0,0,26,19V16ZM13,16h2V14H13.0728a25.8942,25.8942,0,0,1,.5654-4H16V8H14.2c.81-2.4058,1.8149-3.7715,2.3-3.9863.66.2919,2.2842,2.7036,3.0654,6.9863H18v2h1.8442A29.1625,29.1625,0,0,1,20,16v.4263A11.0554,11.0554,0,0,0,13.79,21H13ZM12,28a4.0045,4.0045,0,0,1-4-4V23h4.7639A10.9033,10.9033,0,0,0,12,27Zm12-9a9.01,9.01,0,0,1-9,9H14V27a9.01,9.01,0,0,1,9-9h1Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vo||(Vo=i.createElement("path",{d:"M28,9H14V6H6v8H9V28h2V14h3V11H28ZM12,12H8V8h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Eu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ao||(Ao=i.createElement("circle",{cx:"15.5",cy:"11.5",r:"1.5"})),To||(To=i.createElement("circle",{cx:"20.5",cy:"15.5",r:"1.5"})),Wo||(Wo=i.createElement("circle",{cx:"16",cy:"16",r:"1"})),Uo||(Uo=i.createElement("circle",{cx:"16.5",cy:"20.5",r:"1.5"})),Io||(Io=i.createElement("circle",{cx:"11.5",cy:"16.5",r:"1.5"})),Bo||(Bo=i.createElement("path",{d:"M28,13v2H25.9492a9.9476,9.9476,0,0,0-2.2143-5.3213l1.4367-1.4365,1.4143,1.4145L28,8.2427,23.7578,4l-1.414,1.4141,1.414,1.414-1.437,1.4365A9.9464,9.9464,0,0,0,17,6.0508V4h2V2H13V4h2V6.0508A9.9464,9.9464,0,0,0,9.6792,8.2646L8.2422,6.8281l1.414-1.414L8.2422,4,4,8.2427l1.4141,1.414L6.8284,8.2422,8.2651,9.6787A9.9476,9.9476,0,0,0,6.0508,15H4V13H2v6H4V17H6.0508a9.9476,9.9476,0,0,0,2.2143,5.3213L6.8284,23.7578,5.4141,22.3433,4,23.7573,8.2422,28l1.414-1.4141-1.414-1.414,1.437-1.4365A9.9464,9.9464,0,0,0,15,25.9492V28H13v2h6V28H17V25.9492a9.9464,9.9464,0,0,0,5.3208-2.2138l1.437,1.4365-1.414,1.414L23.7578,28,28,23.7573l-1.4141-1.414-1.4143,1.4145-1.4367-1.4365A9.9476,9.9476,0,0,0,25.9492,17H28v2h2V13ZM16,24a8,8,0,1,1,8-8A8.0092,8.0092,0,0,1,16,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Oo||(Oo=i.createElement("path",{d:"M16,23a7,7,0,1,1,7-7A7.0078,7.0078,0,0,1,16,23Zm0-12a5,5,0,1,0,5,5A5.0057,5.0057,0,0,0,16,11Z"})),Fo||(Fo=i.createElement("path",{d:"M30,6.4141,28.5859,5l-3.35,3.35A12.0812,12.0812,0,0,0,23.65,6.7637L27,3.4141,25.5859,2,21.9766,5.6094A11.9792,11.9792,0,0,0,5.6094,21.9766L2,25.5859,3.4141,27l3.35-3.35A12.0812,12.0812,0,0,0,8.35,25.2363L5,28.5859,6.4141,30l3.6093-3.6094A11.9792,11.9792,0,0,0,26.3906,10.0234ZM16,26A10,10,0,1,1,26,16,10.0114,10.0114,0,0,1,16,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qo||(qo=i.createElement("path",{d:"M10 13H22V15H10zM10 18H22V20H10z"})),Xo||(Xo=i.createElement("path",{d:"M30,6.4141,28.5859,5l-3.35,3.35A12.0812,12.0812,0,0,0,23.65,6.7637L27,3.4141,25.5859,2,21.9766,5.6094A11.9792,11.9792,0,0,0,5.6094,21.9766L2,25.5859,3.4141,27l3.35-3.35A12.0812,12.0812,0,0,0,8.35,25.2363L5,28.5859,6.4141,30l3.6093-3.6094A11.9792,11.9792,0,0,0,26.3906,10.0234ZM16,26A10,10,0,1,1,26,16,10.0114,10.0114,0,0,1,16,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Co||(Co=i.createElement("path",{d:"M26,30H24V27H20a5.0055,5.0055,0,0,1-5-5V20.7207l-2.3162-.772a1,1,0,0,1-.5412-1.4631L15,13.7229V11a9.01,9.01,0,0,1,9-9h5V4H24a7.0078,7.0078,0,0,0-7,7v3a.9991.9991,0,0,1-.1426.5144l-2.3586,3.9312,1.8174.6057A1,1,0,0,1,17,20v2a3.0033,3.0033,0,0,0,3,3h5a1,1,0,0,1,1,1Z"})),Ho||(Ho=i.createElement("circle",{cx:"9",cy:"23",r:"1"})),ko||(ko=i.createElement("circle",{cx:"6",cy:"20",r:"1"})),No||(No=i.createElement("circle",{cx:"6",cy:"26",r:"1"})),Zo||(Zo=i.createElement("circle",{cx:"3",cy:"17",r:"1"})),Yo||(Yo=i.createElement("circle",{cx:"3",cy:"29",r:"1"})),Po||(Po=i.createElement("circle",{cx:"3",cy:"23",r:"1"})),jo||(jo=i.createElement("path",{d:"M19 12H23V14H19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ko||(Ko=i.createElement("path",{d:"M24,30H8a2.0023,2.0023,0,0,1-2-2V4A2.002,2.002,0,0,1,8,2H24a2.0023,2.0023,0,0,1,2,2V20.6182l-5-2.5-5,2.5V4H8V28H24V24h2v4A2.0027,2.0027,0,0,1,24,30ZM21,15.8818l3,1.5V4H18V17.3818Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Go||(Go=i.createElement("circle",{cx:"8",cy:"16",r:"2"})),Qo||(Qo=i.createElement("circle",{cx:"14",cy:"8",r:"2"})),Jo||(Jo=i.createElement("circle",{cx:"28",cy:"12",r:"2"})),$o||($o=i.createElement("circle",{cx:"21",cy:"18",r:"2"})),em||(em=i.createElement("path",{d:"M30,3.4141,28.5859,2,4,26.5859V2H2V28a2,2,0,0,0,2,2H30V28H5.4141ZM4,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),im||(im=i.createElement("path",{d:"M16 22a4 4 0 10-4-4A4 4 0 0016 22zm0-6a2 2 0 11-2 2A2 2 0 0116 16zM14 6H18V8H14z"})),tm||(tm=i.createElement("path",{d:"M24,2H8A2.002,2.002,0,0,0,6,4V28a2.0023,2.0023,0,0,0,2,2H24a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,24,2ZM20,28H12V26a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1Zm2,0V26a3,3,0,0,0-3-3H13a3,3,0,0,0-3,3v2H8V4H24V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ru);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),_m||(_m=i.createElement("path",{d:"M12.887 11.4727a5.9936 5.9936 0 00-8.36-8.3594zM3.113 4.5273a5.9936 5.9936 0 008.36 8.3594z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),sm||(sm=i.createElement("path",{d:"M12.887 11.4727a5.9936 5.9936 0 00-8.36-8.3594zM3.113 4.5273a5.9936 5.9936 0 008.36 8.3594z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Su);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),am||(am=i.createElement("path",{d:"M13 13L3 13 3 3 13 13z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),nm||(nm=i.createElement("path",{d:"M13 13L3 13 3 3 13 13z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Du);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rm||(rm=i.createElement("path",{d:"M25,20H23V9H12V7H23a2,2,0,0,1,2,2Z"})),lm||(lm=i.createElement("path",{d:"M9,23V2H7V7H2V9H7V23a2,2,0,0,0,2,2H23v5h2V25h5V23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dm||(dm=i.createElement("path",{d:"M26,13a4.0045,4.0045,0,0,0,4-4V6H27a3.979,3.979,0,0,0-2.7468,1.1064A6.0041,6.0041,0,0,0,19,4H16V7a6.0066,6.0066,0,0,0,6,6h1V26H11V21h1a4.0045,4.0045,0,0,0,4-4V14H13a3.979,3.979,0,0,0-2.7468,1.1064A6.0041,6.0041,0,0,0,5,12H2v3a6.0066,6.0066,0,0,0,6,6H9v5H2v2H30V26H25V13Zm-1-3a2.002,2.002,0,0,1,2-2h1V9a2.002,2.002,0,0,1-2,2H25ZM11,18a2.002,2.002,0,0,1,2-2h1v1a2.002,2.002,0,0,1-2,2H11ZM9,19H8a4.0045,4.0045,0,0,1-4-4V14H5a4.0045,4.0045,0,0,1,4,4Zm14-8H22a4.0045,4.0045,0,0,1-4-4V6h1a4.0045,4.0045,0,0,1,4,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),om||(om=i.createElement("path",{d:"M2 28H10V30H2zM17 29a1 1 0 01-.7808-.3752L12.52 24H2V22H13a1 1 0 01.7808.3752l3.146 3.9322 5.2412-7.8621A1 1 0 0123.8 18.4L26.5 22H30v2H26a.9991.9991 0 01-.8-.4l-2.1523-2.8694-5.2159 7.824a.9986.9986 0 01-.7885.4443zM11 16V11h1a4.0045 4.0045 0 004-4V4H13a3.9779 3.9779 0 00-2.7468 1.1067A6.0034 6.0034 0 005 2H2V5a6.0066 6.0066 0 006 6H9v5H2v2H16V16zM13 6h1V7a2.002 2.002 0 01-2 2H11V8A2.002 2.002 0 0113 6zM8 9A4.0045 4.0045 0 014 5V4H5A4.0045 4.0045 0 019 8V9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Au);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mm||(mm=i.createElement("path",{d:"M11 24H15V26H11zM5 24H9V26H5zM23 24H27V26H23zM17 24H21V26H17zM9 22a4.92 4.92 0 014-2h6a5.22 5.22 0 014 2h2.3A6.87 6.87 0 0019 18H13a6.87 6.87 0 00-6.3 4zM24 28H26V30H24zM6 28H8V30H6zM16 16a7 7 0 117-7A7 7 0 0116 16zM16 4a5 5 0 00-5 5A5 5 0 0021 9 5 5 0 0016 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vm||(vm=i.createElement("path",{d:"M28,2H10A2.0023,2.0023,0,0,0,8,4V7H4A2.0023,2.0023,0,0,0,2,9V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2ZM10,4H28V7H10ZM28,14H20V9h8ZM10,21V16h8v5Zm8,2v5H10V23ZM8,21H4V16H8ZM18,9v5H10V9Zm2,7h8v5H20ZM8,9v5H4V9ZM4,23H8v5H4Zm16,5V23h8v5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cm||(cm=i.createElement("path",{d:"M26.5859,6.5859A1.9862,1.9862,0,0,0,25.1719,6H17V2H15V12H6.8281a1.9862,1.9862,0,0,0-1.414.5859L2,16l3.4141,3.4141A1.9862,1.9862,0,0,0,6.8281,20H15V30h2V14h8.1719a1.9862,1.9862,0,0,0,1.414-.5859L30,10ZM6.8281,18l-2-2,2-2H15v4Zm18.3438-6H17V8h8.1719l2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),um||(um=i.createElement("path",{d:"M16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0021,2.0021,0,0,1-2-2V10a2.0021,2.0021,0,0,1,2-2h8a2.0021,2.0021,0,0,1,2,2v5a2.0021,2.0021,0,0,1-2,2H18.5352Z"})),fm||(fm=i.createElement("path",{d:"M16,30,7.5645,20.0513c-.0479-.0571-.3482-.4515-.3482-.4515A10.8888,10.8888,0,0,1,5,13a11,11,0,0,1,22,0,10.8844,10.8844,0,0,1-2.2148,6.5973l-.0015.0025s-.3.3944-.3447.4474ZM8.8125,18.395c.001.0007.2334.3082.2866.3744L16,26.9079l6.91-8.15c.0439-.0552.2783-.3649.2788-.3657A8.901,8.901,0,0,0,25,13,9,9,0,0,0,7,13a8.9054,8.9054,0,0,0,1.8125,5.395Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Iu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bm||(bm=i.createElement("path",{fill:"none",d:"M16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0021,2.0021,0,0,1-2-2V10a2.0021,2.0021,0,0,1,2-2h8a2.0021,2.0021,0,0,1,2,2v5a2.0021,2.0021,0,0,1-2,2H18.5352Z"})),pm||(pm=i.createElement("path",{d:"M16,2A11.0134,11.0134,0,0,0,5,13a10.8885,10.8885,0,0,0,2.2163,6.6s.3.3945.3482.4517L16,30l8.439-9.9526c.0444-.0533.3447-.4478.3447-.4478l.0015-.0024A10.8846,10.8846,0,0,0,27,13,11.0134,11.0134,0,0,0,16,2Zm6,13a2.0023,2.0023,0,0,1-2,2H18.5352L16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0023,2.0023,0,0,1-2-2V10a2.0023,2.0023,0,0,1,2-2h8a2.0023,2.0023,0,0,1,2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gm||(gm=i.createElement("path",{d:"M28 9L26 22 24 9 22 9 24.516 23 27.484 23 30 9 28 9zM18 23H12V21h6V17H14a2.002 2.002 0 01-2-2V11a2.002 2.002 0 012-2h6v2H14v4h4a2.002 2.002 0 012 2v4A2.002 2.002 0 0118 23zM10 23H4a2.0023 2.0023 0 01-2-2V11A2.002 2.002 0 014 9h6v2H4V21h6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ou);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Em||(Em=i.createElement("path",{d:"M10 23H5a2 2 0 01-2-2V15a2 2 0 012-2h5v2H5v6h5zM18 23H14a2 2 0 01-2-2V9h2V21h4V9h2V21A2 2 0 0118 23zM27 21L27 9.01 22 9.01 22 11.01 25 11.01 25 21 22 21 22 23 30 23 30 21 27 21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wm||(wm=i.createElement("path",{d:"M10 23H5a2 2 0 01-2-2V15a2 2 0 012-2h5v2H5v6h5zM18 23H14a2 2 0 01-2-2V9h2V21h4V9h2V21A2 2 0 0118 23zM28 9H22v2h6v4H23v2h5v4H22v2h6a2 2 0 002-2V11A2 2 0 0028 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hm||(hm=i.createElement("path",{d:"M28.5039,8.1362l-12-7a1,1,0,0,0-1.0078,0l-12,7A1,1,0,0,0,3,9V23a1,1,0,0,0,.4961.8638l12,7a1,1,0,0,0,1.0078,0l12-7A1,1,0,0,0,29,23V9A1,1,0,0,0,28.5039,8.1362ZM16,3.1577,26.0156,9,16,14.8423,5.9844,9ZM5,10.7412l10,5.833V28.2588L5,22.4258ZM17,28.2588V16.5742l10-5.833V22.4258Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xm||(xm=i.createElement("circle",{cx:"16",cy:"16",r:"2"})),zm||(zm=i.createElement("path",{d:"M23.7769,15.4785A8.64,8.64,0,0,0,16,10a8.64,8.64,0,0,0-7.7769,5.4785L8,16l.2231.5215A8.64,8.64,0,0,0,16,22a8.64,8.64,0,0,0,7.7769-5.4785L24,16ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20Z"})),Lm||(Lm=i.createElement("path",{d:"M28.5039,8.1362l-12-7a1,1,0,0,0-1.0078,0l-12,7A1,1,0,0,0,3,9V23a1,1,0,0,0,.4961.8638l12,7a1,1,0,0,0,1.0078,0l12-7A1,1,0,0,0,29,23V9A1,1,0,0,0,28.5039,8.1362ZM27,22.4258,16,28.8423,5,22.4258V9.5742L16,3.1577,27,9.5742Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mm||(Mm=i.createElement("path",{d:"M21,12V10H17V7H15v3H13a2.002,2.002,0,0,0-2,2v3a2.002,2.002,0,0,0,2,2h6v3H11v2h4v3h2V22h2a2.0023,2.0023,0,0,0,2-2V17a2.002,2.002,0,0,0-2-2H13V12Z"})),Rm||(Rm=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12.0353,12.0353,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14.0412,14.0412,0,0,0,16,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sm||(Sm=i.createElement("path",{d:"M21.4023,15.6426A4.9727,4.9727,0,0,0,23,12V11a5.0059,5.0059,0,0,0-5-5H17V3H15V6H10V26h5v3h2V26h2a5.0059,5.0059,0,0,0,5-5V20A4.9834,4.9834,0,0,0,21.4023,15.6426ZM12,8h6a3.0033,3.0033,0,0,1,3,3v1a3.0033,3.0033,0,0,1-3,3H12ZM22,21a3.0033,3.0033,0,0,1-3,3H12V17h7a3.0033,3.0033,0,0,1,3,3Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ku);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dm||(Dm=i.createElement("path",{d:"M23,20.5151c0-4.6152-3.78-5.1411-6.8171-5.563-3.31-.4609-5.1829-.86-5.1829-3.71C11,8.8491,13.5071,8,15.6538,8a6.7538,6.7538,0,0,1,5.5681,2.6279l1.5562-1.2558A8.6508,8.6508,0,0,0,17,6.0962V3H15V6.022c-3.6152.2192-6,2.26-6,5.22,0,4.73,3.83,5.2627,6.9075,5.69C19.16,17.3848,21,17.7744,21,20.5151,21,23.5474,17.8674,24,16,24c-3.4294,0-4.8782-.9639-6.2219-2.6279L8.2219,22.6279A8.4382,8.4382,0,0,0,15,25.9648V29h2V25.9551C20.7256,25.6509,23,23.6279,23,20.5151Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ym||(ym=i.createElement("path",{d:"M17,26c-3.6162,0-6.3328-2.2974-7.4456-6H19V18H9.1321A15.2782,15.2782,0,0,1,9,16c0-.33.01-.6641.0259-1H19V13H9.2371C9.8447,9.3525,11.81,6,17,6c3.8533,0,5.5315,1.6465,7.1282,4.4893l1.7436-.9786C24.2649,6.6484,22.0779,4,17,4,10.6448,4,7,8.374,7,16c0,7.0654,4.1121,12,10,12,5.0779,0,7.2649-2.6484,8.8718-5.5107l-1.7436-.9786C22.5315,24.3535,20.8533,26,17,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vm||(Vm=i.createElement("path",{d:"M23,19a6.0066,6.0066,0,0,1-6,6H13V18.1079L21.2139,15V13L13,16.1079v-3L21.2139,10V8L13,11.1079V5H11v6.8647L8,13v2l3-1.1353v3L8,18v2l3-1.1353V27h6a8.0092,8.0092,0,0,0,8-8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Am||(Am=i.createElement("path",{d:"M12.4531,25A8.7775,8.7775,0,0,0,14,20a10.6,10.6,0,0,0-.18-2H22V16H13.2175c-.0842-.2109-.17-.4194-.2556-.624A9.8586,9.8586,0,0,1,12,11a4.792,4.792,0,0,1,5-5,6.1234,6.1234,0,0,1,5.2222,2.6279l1.5556-1.2558A8.11,8.11,0,0,0,17,4a6.7781,6.7781,0,0,0-7,7,11.65,11.65,0,0,0,1.0559,5H8v2h3.7729A8.209,8.209,0,0,1,12,20c0,2.5234-1.4858,5-3,5v2H24V25Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Tm||(Tm=i.createElement("path",{d:"M19,4H10V15H7v2h3v3H7v2h3v6h2V22h9V20H12V17h7a6.0067,6.0067,0,0,0,6-6V10A6.0067,6.0067,0,0,0,19,4Zm4,7a4.0045,4.0045,0,0,1-4,4H12V6h7a4.0045,4.0045,0,0,1,4,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ju);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wm||(Wm=i.createElement("path",{d:"M24,7V5H8V7h5.5a4.4906,4.4906,0,0,1,4.45,4H8v2h9.95A4.4906,4.4906,0,0,1,13.5,17H8v2.3452L17.6169,28l1.3379-1.4863L10.606,19H13.5a6.5041,6.5041,0,0,0,6.4746-6H24V11H19.9746A6.4719,6.4719,0,0,0,18.18,7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ku);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Um||(Um=i.createElement("path",{d:"M9,27H7V5h8a5.0057,5.0057,0,0,1,5,5V22H18V10a3.0033,3.0033,0,0,0-3-3H9Z"})),Im||(Im=i.createElement("path",{d:"M20,27H12V10h2V25h6a3.0033,3.0033,0,0,0,3-3V5h2V22A5.0057,5.0057,0,0,1,20,27Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bm||(Bm=i.createElement("path",{d:"M28 14L28 12 23.045 12 24 5 22 5 20 23 17 8 15 8 12 23 10 5 8 5 8.955 12 4 12 4 14 9.227 14 9.636 17 4 17 4 19 9.909 19 11 27 13 27 16 12 19 27 21 27 22.091 19 28 19 28 17 22.364 17 22.773 14 28 14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Om||(Om=i.createElement("path",{d:"M24.271 5L22 5 16 16 10 5 7.729 5 13.794 16 8 16 8 18 15 18 15 21 8 21 8 23 15 23 15 27 17 27 17 23 24 23 24 21 17 21 17 18 24 18 24 16 18.206 16 24.271 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ju);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fm||(Fm=i.createElement("path",{d:"M23,28a1,1,0,0,1-.71-.29l-6.13-6.14-3.33,5a1,1,0,0,1-1,.44,1,1,0,0,1-.81-.7l-6-20A1,1,0,0,1,6.29,5l20,6a1,1,0,0,1,.7.81,1,1,0,0,1-.44,1l-5,3.33,6.14,6.13a1,1,0,0,1,0,1.42l-4,4A1,1,0,0,1,23,28Zm0-2.41L25.59,23l-7.16-7.15,5.25-3.5L7.49,7.49l4.86,16.19,3.5-5.25Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$u);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qm||(qm=i.createElement("path",{d:"M27.34,12.06l-22-8A1,1,0,0,0,4.06,5.34l8,22A1,1,0,0,0,13,28h0a1,1,0,0,0,.93-.63l3.84-9.6,9.6-3.84a1,1,0,0,0,0-1.87Zm-10.71,4h0l-.4.16-.16.4h0L13,24.2,6.67,6.67,24.2,13Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ef);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xm||(Xm=i.createElement("path",{d:"M26.5,19.63,20.24,16l6.26-3.63a5,5,0,0,0-1.21-9.2A5.19,5.19,0,0,0,24,3a5,5,0,0,0-4.33,7.53,5,5,0,0,0,2.39,2.1l-3.82,2.21L4,6.6,3,8.34,16.24,16,3,23.68l1,1.74,14.24-8.26,3.82,2.21a5,5,0,0,0-2.39,2.1A5,5,0,0,0,24,29a5.19,5.19,0,0,0,1.29-.17,5,5,0,0,0,1.21-9.2ZM21.4,9.53a3,3,0,0,1,1.1-4.12,3,3,0,0,1,4.1,1.11,3,3,0,0,1-1.1,4.11h0A3,3,0,0,1,21.4,9.53Zm5.2,16a3,3,0,0,1-4.1,1.11,3,3,0,0,1-1.1-4.12,3,3,0,0,1,4.1-1.1h0A3,3,0,0,1,26.6,25.48Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cm||(Cm=i.createElement("path",{d:"M28,4H4A2.0023,2.0023,0,0,0,2,6V26a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V6A2.0023,2.0023,0,0,0,28,4ZM4,6H16V26H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_f);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hm||(Hm=i.createElement("path",{d:"M19.05 13.7326L18.05 12 7.928 17.8457 6.9312 17.27a2.9524 2.9524 0 00.6672-.769A3 3 0 103.5 17.5986l2.428 1.4019L3.5 20.4023a3.0342 3.0342 0 103.4407.3223l.987-.5693L14.5914 24l1-1.7294-5.6634-3.27zM4.0344 15.26a1 1 0 11.4658.6069A.9929.9929 0 014.0344 15.26zM4.9988 22a1 1 0 11-.8645 1.5A1 1 0 014.9988 22zM17 26H21V28H17zM10 26H14V28H10z"})),km||(km=i.createElement("path",{d:"M28,28H24V26h4V4H7V8H5V4A2.0023,2.0023,0,0,1,7,2H28a2.0023,2.0023,0,0,1,2,2V26A2.0023,2.0023,0,0,1,28,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nm||(Nm=i.createElement("path",{d:"M15 23H10a2 2 0 01-2-2V15a2 2 0 012-2h5v2H10v6h5zM24 9L22 9 20 16 18 9 16 9 19 18 19 23 21 23 21 18 24 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,af);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zm||(Zm=i.createElement("path",{d:"M25 30a6 6 0 116-6A6.0069 6.0069 0 0125 30zm0-10a4 4 0 104 4A4.0045 4.0045 0 0025 20zM7 30a6 6 0 116-6A6.0069 6.0069 0 017 30zM7 20a4 4 0 104 4A4.0045 4.0045 0 007 20z"})),Ym||(Ym=i.createElement("path",{d:"M17 27H15V20.4139L9.5849 15a2.003 2.003 0 010-2.8292l4.5859-4.5859a2.0024 2.0024 0 012.8286 0L21.414 12H27v1.9993L20.5853 14l-5-5L11 13.5849l6 6zM21.5 8A3.5 3.5 0 1125 4.5 3.5042 3.5042 0 0121.5 8zm0-5A1.5 1.5 0 1023 4.5 1.5017 1.5017 0 0021.5 3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pm||(Pm=i.createElement("path",{d:"M14 23H9a2 2 0 01-2-2V15a2 2 0 012-2h5v2H9v6h5zM24 9L16 9 16 11 22 11 16 21 16 23 24 23 24 21 18 21 24 11 24 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jm||(jm=i.createElement("path",{d:"M24 21H26V26H24zM20 16H22V26H20zM11 26a5.0059 5.0059 0 01-5-5H8a3 3 0 103-3V16a5 5 0 010 10z"})),Km||(Km=i.createElement("path",{d:"M28,2H4A2.002,2.002,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,9H14V4H28ZM12,4v7H4V4ZM4,28V13H28.0007l.0013,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gm||(Gm=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM24 21H26V26H24zM20 16H22V26H20zM16 18H18V26H16z"})),Qm||(Qm=i.createElement("path",{d:"M28,2H4A2.002,2.002,0,0,0,2,4V16H4V13H28.001l.001,15H16v2H28a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2ZM12,11H4V4h8Zm2,0V4H28l.0007,7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,df);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jm||(Jm=i.createElement("path",{d:"M15 6H28V8H15zM15 24H28V26H15zM4 15H17V17H4zM7 11a4 4 0 114-4A4 4 0 017 11zM7 5A2 2 0 109 7 2 2 0 007 5zM7 29a4 4 0 114-4A4 4 0 017 29zm0-6a2 2 0 102 2A2 2 0 007 23zM25 20a4 4 0 114-4A4 4 0 0125 20zm0-6a2 2 0 102 2A2 2 0 0025 14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,of);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$m||($m=i.createElement("path",{d:"M4 6H15V8H4zM18 6H28V8H18zM21 12H28V14H21zM11 12H18V14H11zM4 12H8V14H4zM4 18H28V20H4zM4 24H21V26H4zM24 24H28V26H24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ev||(ev=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V5A2,2,0,0,0,24,3Zm0,2v6H8V5ZM8,19V13H24v6Zm0,8V21H24v6Z"})),iv||(iv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),tv||(tv=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),_v||(_v=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sv||(sv=i.createElement("path",{d:"M7 8H12V10H7zM7 12H12V14H7zM7 16H12V18H7zM20 8H25V10H20zM20 12H25V14H20zM20 16H25V18H20z"})),av||(av=i.createElement("path",{d:"M28,4H4A2.0023,2.0023,0,0,0,2,6V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V6A2.0023,2.0023,0,0,0,28,4ZM4,6H15V28H4ZM17,28V6H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nv||(nv=i.createElement("path",{d:"M28,10H23V6a2.0023,2.0023,0,0,0-2-2H11A2.0023,2.0023,0,0,0,9,6v4H4a2.0023,2.0023,0,0,0-2,2V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V12A2.0023,2.0023,0,0,0,28,10ZM4,28V12H9v2H7v2H9v2H7v2H9v2H7v2H9v4Zm17,0H11V6H21Zm7,0H23V24h2V22H23V20h2V18H23V16h2V14H23V12h5Z"})),rv||(rv=i.createElement("path",{d:"M14 8H18V10H14zM14 12H18V14H14zM14 16H18V18H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lv||(lv=i.createElement("path",{d:"M23 27.18L20.41 24.59 19 26 23 30 30 23 28.59 21.59 23 27.18z"})),dv||(dv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),ov||(ov=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),mv||(mv=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),vv||(vv=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2h8V27H8V21H26V5A2,2,0,0,0,24,3Zm0,16H8V13H24Zm0-8H8V5H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ff);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cv||(cv=i.createElement("path",{d:"M30 30L24 30 24 28 28 28 28 4 24 4 24 2 30 2 30 30z"})),uv||(uv=i.createElement("path",{d:"M24.91,19.59a4.51,4.51,0,0,0-2.66-3.24,4.55,4.55,0,0,0-3.5,0,4.94,4.94,0,0,0-.64.35L15.3,13.89a4.53,4.53,0,1,0-1.41,1.41l2.81,2.81a4.48,4.48,0,0,0-.61,3.3,4.51,4.51,0,0,0,2.66,3.24,4.55,4.55,0,0,0,3.5,0,4.51,4.51,0,0,0,2.66-3.24,4.65,4.65,0,0,0,0-1.82ZM11.5,14A2.5,2.5,0,1,1,14,11.5,2.5,2.5,0,0,1,11.5,14Z"})),fv||(fv=i.createElement("path",{d:"M8 30L2 30 2 2 8 2 8 4 4 4 4 28 8 28 8 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bv||(bv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),pv||(pv=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),gv||(gv=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),Ev||(Ev=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2H18V27H8V21H26V5A2,2,0,0,0,24,3Zm0,16H8V13H24Zm0-8H8V5H24Z"})),wv||(wv=i.createElement("path",{d:"M29 24.415L27.586 23 25 25.587 22.414 23 21 24.415 23.586 27 21 29.586 22.414 31 25 28.414 27.586 31 29 29.586 26.414 27 29 24.415z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hv||(hv=i.createElement("path",{d:"M18 11H26V13H18zM6 19H14V21H6zM10 16a4 4 0 114-4A4.0045 4.0045 0 0110 16zm0-6a2 2 0 102 2A2.002 2.002 0 0010 10zM22 24a4 4 0 114-4A4.0045 4.0045 0 0122 24zm0-6a2 2 0 102 2A2.002 2.002 0 0022 18z"})),xv||(xv=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,28,30ZM4,4V28H28V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zv||(zv=i.createElement("path",{d:"M25 13L25 4 23 4 23 6 20 6 20 8 23 8 23 13 20 13 20 15 28 15 28 13 25 13zM8.5 6A3.5 3.5 0 115 9.5 3.504 3.504 0 018.5 6m0-2A5.5 5.5 0 1014 9.5 5.5 5.5 0 008.5 4zM23.5 20A3.5 3.5 0 1120 23.5 3.504 3.504 0 0123.5 20m0-2A5.5 5.5 0 1029 23.5 5.5 5.5 0 0023.5 18zM6 19L6 21 9.586 21 4 26.586 5.414 28 11 22.414 11 26 13 26 13 19 6 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ef);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lv||(Lv=i.createElement("path",{d:"M25 13L25 4 23 4 23 6 20 6 20 8 23 8 23 13 20 13 20 15 28 15 28 13 25 13zM8.5 6A3.5 3.5 0 115 9.5 3.5 3.5 0 018.5 6m0-2A5.5 5.5 0 1014 9.5 5.5 5.5 0 008.5 4zM8.5 20A3.5 3.5 0 115 23.5 3.5 3.5 0 018.5 20m0-2A5.5 5.5 0 1014 23.5 5.5 5.5 0 008.5 18zM23.5 20A3.5 3.5 0 1120 23.5 3.5 3.5 0 0123.5 20m0-2A5.5 5.5 0 1029 23.5 5.5 5.5 0 0023.5 18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mv||(Mv=i.createElement("circle",{cx:"9",cy:"7",r:"1"})),Rv||(Rv=i.createElement("path",{d:"M27,22.14V18a2,2,0,0,0-2-2H17V12h9a2,2,0,0,0,2-2V4a2,2,0,0,0-2-2H6A2,2,0,0,0,4,4v6a2,2,0,0,0,2,2h9v4H7a2,2,0,0,0-2,2v4.14a4,4,0,1,0,2,0V18h8v4H12v8h8V22H17V18h8v4.14a4,4,0,1,0,2,0ZM8,26a2,2,0,1,1-2-2A2,2,0,0,1,8,26Zm10-2v4H14V24ZM6,10V4H26v6ZM26,28a2,2,0,1,1,2-2A2,2,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sv||(Sv=i.createElement("path",{d:"M6 24a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 006 22zM16 4a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 0016 2zM26 4a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 0026 2zM18 24v4H14V24h4m2-2H12v8h8z"})),Dv||(Dv=i.createElement("path",{d:"M27,22.14V17a2,2,0,0,0-2-2H7V10h3V2H2v8H5v5a2,2,0,0,0,2,2H25v5.14a4,4,0,1,0,2,0ZM4,4H8V8H4ZM26,28a2,2,0,1,1,2-2A2,2,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yv||(yv=i.createElement("circle",{cx:"22",cy:"24",r:"2"})),Vv||(Vv=i.createElement("path",{d:"M29.7769,23.4785A8.64,8.64,0,0,0,22,18a8.64,8.64,0,0,0-7.7769,5.4785L14,24l.2231.5215A8.64,8.64,0,0,0,22,30a8.64,8.64,0,0,0,7.7769-5.4785L30,24ZM22,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,22,28Z"})),Av||(Av=i.createElement("circle",{cx:"8",cy:"8",r:"1"})),Tv||(Tv=i.createElement("circle",{cx:"8",cy:"16",r:"1"})),Wv||(Wv=i.createElement("circle",{cx:"8",cy:"24",r:"1"})),Uv||(Uv=i.createElement("path",{d:"M5,21h7V19H5V13H21v3h2V5a2,2,0,0,0-2-2H5A2,2,0,0,0,3,5V27a2,2,0,0,0,2,2h7V27H5ZM5,5H21v6H5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Iv||(Iv=i.createElement("circle",{cx:"22",cy:"24",r:"2"})),Bv||(Bv=i.createElement("path",{d:"M29.7769 23.4785A8.64 8.64 0 0022 18a8.64 8.64 0 00-7.7769 5.4785L14 24l.2231.5215A8.64 8.64 0 0022 30a8.64 8.64 0 007.7769-5.4785L30 24zM22 28a4 4 0 114-4A4.0045 4.0045 0 0122 28zM7 17H12V19H7zM7 12H19V14H7zM7 7H19V9H7z"})),Ov||(Ov=i.createElement("path",{d:"M22,2,4,2A2.0058,2.0058,0,0,0,2,4V28a2.0058,2.0058,0,0,0,2,2h8V28H4V4H22V15h2V4A2.0058,2.0058,0,0,0,22,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fv||(Fv=i.createElement("path",{d:"M28,20H26v2h2v6H4V22H6V20H4a2.0024,2.0024,0,0,0-2,2v6a2.0024,2.0024,0,0,0,2,2H28a2.0024,2.0024,0,0,0,2-2V22A2.0024,2.0024,0,0,0,28,20Z"})),qv||(qv=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),Xv||(Xv=i.createElement("path",{d:"M21,13a2.9609,2.9609,0,0,0-1.2854.3008L17.4141,11l2.3-2.3008A2.9609,2.9609,0,0,0,21,9a3,3,0,1,0-3-3,2.9665,2.9665,0,0,0,.3,1.2852L16,9.5859,13.7,7.2852A2.9665,2.9665,0,0,0,14,6a3,3,0,1,0-3,3,2.9609,2.9609,0,0,0,1.2854-.3008L14.5859,11l-2.3005,2.3008A2.9609,2.9609,0,0,0,11,13a3,3,0,1,0,3,3,2.9665,2.9665,0,0,0-.3-1.2852L16,12.4141l2.3,2.3007A2.9665,2.9665,0,0,0,18,16a3,3,0,1,0,3-3Zm0-8a1,1,0,1,1-1,1A1.0009,1.0009,0,0,1,21,5ZM10,6a1,1,0,1,1,1,1A1.0009,1.0009,0,0,1,10,6Zm1,11a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,11,17Zm10,0a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,21,17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cv||(Cv=i.createElement("circle",{cx:"7",cy:"7",r:"1"})),Hv||(Hv=i.createElement("circle",{cx:"7",cy:"15",r:"1"})),kv||(kv=i.createElement("circle",{cx:"7",cy:"23",r:"1"})),Nv||(Nv=i.createElement("path",{d:"M12,26H4V20h8V18H4V12H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V26a2,2,0,0,0,2,2h8ZM4,4H20v6H4Z"})),Zv||(Zv=i.createElement("path",{d:"M28,17v2.4131A6.996,6.996,0,1,0,22,30V28a5,5,0,1,1,4.5762-7H24v2h6V17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yv||(Yv=i.createElement("path",{d:"M28 2H20a2.0023 2.0023 0 00-2 2V28a2.0023 2.0023 0 002 2h8a2.0023 2.0023 0 002-2V4A2.0023 2.0023 0 0028 2zm0 2v7H20V4zm0 9v6H20V13zM20 28V21h8v7zM12 15L10 15 10 13 8 13 8 15 6 15 6 17 8 17 8 19 10 19 10 17 12 17 12 15z"})),Pv||(Pv=i.createElement("path",{d:"M16,6V4H10A2.0023,2.0023,0,0,0,8,6V9.08A6.99,6.99,0,0,0,8,22.92V26a2.0023,2.0023,0,0,0,2,2h6V26H10V22.92A6.99,6.99,0,0,0,10,9.08V6ZM14,16a5,5,0,1,1-5-5A5.0059,5.0059,0,0,1,14,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jv||(jv=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,28,30ZM4,4V28H28V4Z"})),Kv||(Kv=i.createElement("path",{d:"M13 7H15V14H13zM8 7H10V14H8zM22 14H20a2.0021 2.0021 0 01-2-2V9a2.0021 2.0021 0 012-2h2a2.0021 2.0021 0 012 2v3A2.0021 2.0021 0 0122 14zM20 9v3h2V9zM22 18H24V25H22zM8 18H10V25H8zM17 25H15a2.0021 2.0021 0 01-2-2V20a2.0021 2.0021 0 012-2h2a2.0021 2.0021 0 012 2v3A2.0021 2.0021 0 0117 25zm-2-5v3h2V20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Df);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gv||(Gv=i.createElement("path",{d:"M26,16a3.9612,3.9612,0,0,0-2.02.5657l-2.8586-2.8585,2.293-2.293a2,2,0,0,0,0-2.8284l-6-6a2,2,0,0,0-2.8284,0l-6,6a2,2,0,0,0,0,2.8284l2.293,2.293L8.02,16.5657A4.043,4.043,0,1,0,9.4343,17.98l2.8585-2.8586,2.293,2.293A1.9773,1.9773,0,0,0,15,17.7233V22H12v8h8V22H17V17.7233a1.9773,1.9773,0,0,0,.4142-.3091l2.293-2.293L22.5657,17.98A3.9885,3.9885,0,1,0,26,16ZM8,20a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,8,20Zm10,4v4H14V24h4Zm-2-8-6-6,6-6,6,6Zm10,6a2,2,0,1,1,2-2A2.0023,2.0023,0,0,1,26,22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qv||(Qv=i.createElement("circle",{cx:"16",cy:"16",r:"2"})),Jv||(Jv=i.createElement("path",{d:"M30 17L30 15 23.83 15 26.41 12.41 25 11 20 16 25 21 26.41 19.59 23.83 17 30 17zM15 23.83L15 30 17 30 17 23.83 19.59 26.41 21 25 16 20 11 25 12.41 26.41 15 23.83zM7 11L5.59 12.41 8.17 15 2 15 2 17 8.17 17 5.59 19.59 7 21 12 16 7 11zM17 8.17L17 2 15 2 15 8.17 12.41 5.59 11 7 16 12 21 7 19.59 5.59 17 8.17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$v||($v=i.createElement("circle",{cx:"14",cy:"14",r:"2"})),ec||(ec=i.createElement("path",{d:"M20,30a.9967.9967,0,0,1-.707-.293L8.5859,19A2.0126,2.0126,0,0,1,8,17.5859V10a2.002,2.002,0,0,1,2-2h7.5859A1.9864,1.9864,0,0,1,19,8.5859L29.707,19.293a.9994.9994,0,0,1,0,1.414l-9,9A.9967.9967,0,0,1,20,30ZM10,10v7.5859l10,10L27.5859,20l-10-10Z"})),ic||(ic=i.createElement("path",{d:"M12,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2v8H28V4H4V28h8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Af);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tc||(tc=i.createElement("path",{d:"M30,15H27V7H25v8H22V7H20v7.8262L7.5239,7.1484A1,1,0,0,0,6,8v7H2v2H6v7a1,1,0,0,0,1.5239.8516L20,17.1738V25h2V17h3v8h2V17h3ZM8,22.21V9.79L18.0918,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_c||(_c=i.createElement("path",{d:"M28 13H30V15H28z"})),sc||(sc=i.createElement("path",{d:"M24.2 3.8H26.2V5.8H24.2z",transform:"rotate(-45.001 25.192 4.808)"})),ac||(ac=i.createElement("path",{d:"M15 0H17V2H15z"})),nc||(nc=i.createElement("path",{d:"M5.8 3.8H7.8V5.8H5.8z",transform:"rotate(-134.999 6.808 4.808)"})),rc||(rc=i.createElement("path",{d:"M2 13H4V15H2zM20 13L17 13 17 10 15 10 15 13 12 13 12 15 15 15 15 18 17 18 17 15 20 15zM13 30H19V32H13zM11 26H21V28H11z"})),lc||(lc=i.createElement("path",{d:"M16,4C10.5,4,6,8.5,6,14c0,4.4,2,6.3,3.5,7.6c1,0.9,1.5,1.5,1.5,2.4h2c0-1.8-1.1-2.9-2.2-3.9C9.4,18.9,8,17.5,8,14 c0-4.4,3.6-8,8-8s8,3.6,8,8c0,3.5-1.4,4.9-2.8,6.1c-1.1,1-2.2,2-2.2,3.9h2c0-0.9,0.5-1.5,1.5-2.4C24,20.3,26,18.4,26,14 C26,8.5,21.5,4,16,4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dc||(dc=i.createElement("path",{d:"M28 24v2H15.8164a2.983 2.983 0 00-5.6328 0H4V24H2v6H4V28h6.1836a2.983 2.983 0 005.6328 0H28v2h2V24zM13 7.5L13 16.499 13 16.499 21 12 13 7.5z"})),oc||(oc=i.createElement("path",{d:"M16,22A10,10,0,1,1,26,12,10.0113,10.0113,0,0,1,16,22ZM16,4a8,8,0,1,0,8,8A8.0092,8.0092,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mc||(mc=i.createElement("path",{d:"M7,30a5,5,0,1,1,5-5A5.0059,5.0059,0,0,1,7,30Zm0-8a3,3,0,1,0,3,3A3.0033,3.0033,0,0,0,7,22Z"})),vc||(vc=i.createElement("path",{d:"M24,26H14V24H24V17H8a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,8,6H18V8H8v7H24a2.0021,2.0021,0,0,1,2,2v7A2.0021,2.0021,0,0,1,24,26Z"})),cc||(cc=i.createElement("path",{d:"M28,12H22a2.0023,2.0023,0,0,1-2-2V4a2.0023,2.0023,0,0,1,2-2h6a2.0023,2.0023,0,0,1,2,2v6A2.0023,2.0023,0,0,1,28,12ZM22,4v6h6V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,If);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uc||(uc=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM28 12H22a2.0023 2.0023 0 01-2-2V4a2.0023 2.0023 0 012-2h6a2.0023 2.0023 0 012 2v6A2.0023 2.0023 0 0128 12zM22 4v6h6V4z"})),fc||(fc=i.createElement("path",{d:"M24,26H16V24h8V17H8a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,8,6H18V8H8v7H24a2.0021,2.0021,0,0,1,2,2v7A2.0021,2.0021,0,0,1,24,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bc||(bc=i.createElement("path",{d:"M5 25V15.8281l-3.5859 3.586L0 18l6-6 6 6-1.4141 1.4141L7 15.8281V25H19v2H7A2.0024 2.0024 0 015 25zM24 22h4a2.002 2.002 0 012 2v4a2.002 2.002 0 01-2 2H24a2.002 2.002 0 01-2-2V24A2.002 2.002 0 0124 22zm4 6V24H23.9985L24 28zM27 6v9.1719l3.5859-3.586L32 13l-6 6-6-6 1.4141-1.4141L25 15.1719V6H13V4H25A2.0024 2.0024 0 0127 6zM2 6H8V8H2zM2 2H10V4H2z"})),_)})).propTypes=da;var Ff=["iconDescription","className"];function qf(e){var t=e.iconDescription,_=e.className,s=B(e,Ff),a=Z();return i.createElement(gc,T({className:k()(_,"".concat(a,"--copy-btn")),"aria-label":t,title:t},s),i.createElement(Of,{className:"".concat(a,"--snippet__icon")}))}qf.propTypes={className:P().string,feedback:P().string,feedbackTimeout:P().number,iconDescription:P().string,onClick:P().func},qf.defaultProps={iconDescription:"Copy to clipboard",feedback:"Copied!",feedbackTimeout:2e3,onClick:function(){}};var Xf=0;var Cf,Hf,kf,Nf,Zf,Yf,Pf,jf,Kf,Gf,Qf,Jf,$f,eb,ib,tb,_b,sb,ab,nb,rb,lb,db,ob,mb,vb,cb,ub,fb,bb,pb,gb,Eb,wb,hb,xb,zb,Lb,Mb,Rb,Sb,Db,yb,Vb,Ab,Tb,Wb,Ub,Ib,Bb,Ob,Fb,qb,Xb,Cb,Hb,kb,Nb,Zb,Yb,Pb,jb,Kb,Gb,Qb,Jb,$b,ep,ip,tp,_p,sp,ap,np,rp,lp,dp,op,mp,vp,cp,up,fp,bp,pp,gp,Ep,wp,hp,xp,zp,Lp,Mp,Rp,Sp,Dp,yp,Vp,Ap,Tp,Wp,Up,Ip,Bp,Op,Fp,qp,Xp,Cp,Hp,kp,Np,Zp,Yp,Pp,jp,Kp,Gp,Qp,Jp,$p,eg,ig,tg,_g,sg,ag,ng,rg,lg,dg,og,mg,vg,cg,ug,fg,bg,pg,gg,Eg,wg,hg,xg,zg,Lg,Mg,Rg,Sg,Dg,yg,Vg,Ag,Tg,Wg,Ug,Ig,Bg,Og,Fg,qg,Xg,Cg,Hg,kg,Ng,Zg,Yg,Pg,jg,Kg,Gg,Qg,Jg,$g,eE,iE,tE,_E,sE,aE,nE,rE,lE,dE,oE,mE,vE,cE,uE,fE,bE,pE,gE,EE,wE,hE,xE,zE,LE,ME,RE,SE,DE,yE,VE,AE,TE,WE,UE,IE,BE,OE,FE,qE=t(998),XE=t.n(qE),CE=["className","type","children","disabled","feedback","feedbackTimeout","onClick","ariaLabel","copyText","copyButtonDescription","light","showMoreText","showLessText","hideCopyButton","wrapText","maxCollapsedNumberOfRows","maxExpandedNumberOfRows","minCollapsedNumberOfRows","minExpandedNumberOfRows"],HE=16;function kE(e){var t,_=e.className,s=e.type,a=e.children,n=e.disabled,r=e.feedback,l=e.feedbackTimeout,d=e.onClick,o=e.ariaLabel,m=e.copyText,v=e.copyButtonDescription,c=e.light,u=e.showMoreText,f=e.showLessText,b=e.hideCopyButton,p=e.wrapText,g=e.maxCollapsedNumberOfRows,E=void 0===g?15:g,w=e.maxExpandedNumberOfRows,h=void 0===w?0:w,x=e.minCollapsedNumberOfRows,z=void 0===x?3:x,L=e.minExpandedNumberOfRows,M=void 0===L?16:L,R=B(e,CE),S=q((0,i.useState)(!1),2),D=S[0],y=S[1],V=q((0,i.useState)(!1),2),W=V[0],U=V[1],I=(0,i.useRef)(function(){return Xf++,"".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id").concat(Xf)}()),O=I.current,F=(0,i.useRef)(),X=(0,i.useRef)(),C=(0,i.useRef)(),H=q((0,i.useState)(!1),2),N=H[0],Y=H[1],P=q((0,i.useState)(!1),2),j=P[0],K=P[1],G=(0,i.useCallback)((function(){return"single"===s?X:"multi"===s?F:void 0}),[s]),Q=Z(),J=(0,i.useCallback)((function(){var e=G().current,i=e.clientWidth,t=e.scrollLeft,_=e.scrollWidth;return{horizontalOverflow:_>i,codeClientWidth:i,codeScrollWidth:_,codeScrollLeft:t}}),[G]),$=(0,i.useCallback)((function(){if("inline"!==s&&("single"!==s||null!==X&&void 0!==X&&X.current)&&("multi"!==s||null!==F&&void 0!==F&&F.current)){var e=J(),i=e.horizontalOverflow,t=e.codeClientWidth,_=e.codeScrollWidth,a=e.codeScrollLeft;Y(i&&!!a),K(i&&a+t!==_)}}),[s,J]);hl({ref:G(),onResize:function(){if(null!==F&&void 0!==F&&F.current&&"multi"===s){var e=F.current.getBoundingClientRect().height;U(E>0&&(h<=0||h>E)&&e>E*HE),D&&M>0&&e<=M*HE&&y(!1)}(null!==F&&void 0!==F&&F.current&&"multi"===s||null!==X&&void 0!==X&&X.current&&"single"===s)&&$()}},[s,E,h,M,HE]),(0,i.useEffect)((function(){$()}),[$]);var ee=function(e){var i;(m||null!==C&&void 0!==C&&C.current)&&XE()(null!==m&&void 0!==m?m:null===C||void 0===C||null===(i=C.current)||void 0===i?void 0:i.innerText);d&&d(e)},ie=k()(_,"".concat(Q,"--snippet"),(A(t={},"".concat(Q,"--snippet--").concat(s),s),A(t,"".concat(Q,"--snippet--disabled"),"inline"!==s&&n),A(t,"".concat(Q,"--snippet--expand"),D),A(t,"".concat(Q,"--snippet--light"),c),A(t,"".concat(Q,"--snippet--no-copy"),b),A(t,"".concat(Q,"--snippet--wraptext"),p),t)),te=D?f:u;if("inline"===s)return b?i.createElement("span",{className:ie},i.createElement("code",{id:O,ref:C},a)):i.createElement(gc,T({},R,{onClick:ee,"aria-label":o,"aria-describedby":O,className:ie,feedback:r,feedbackTimeout:l}),i.createElement("code",{id:O,ref:C},a));var _e={};if("multi"===s){var se={};D?(h>0&&(se.maxHeight=h*HE),M>0&&(se.minHeight=M*HE)):(E>0&&(se.maxHeight=E*HE),z>0&&(se.minHeight=z*HE)),Object.keys(se).length&&(_e.style=se)}return i.createElement("div",T({},R,{className:ie}),i.createElement("div",T({ref:X,role:"single"===s?"textbox":null,tabIndex:"single"!==s||n?null:0,className:"".concat(Q,"--snippet-container"),"aria-label":o||"code-snippet",onScroll:"single"===s&&$||null},_e),i.createElement("pre",{ref:F,onScroll:"multi"===s&&$||null},i.createElement("code",{ref:C},a))),N&&i.createElement("div",{className:"".concat(Q,"--snippet__overflow-indicator--left")}),j&&i.createElement("div",{className:"".concat(Q,"--snippet__overflow-indicator--right")}),!b&&i.createElement(qf,{disabled:n,onClick:ee,feedback:r,feedbackTimeout:l,iconDescription:v}),W&&i.createElement(Sl,{kind:"ghost",size:"field",className:"".concat(Q,"--snippet-btn--expand"),disabled:n,onClick:function(){return y(!D)}},i.createElement("span",{className:"".concat(Q,"--snippet-btn--text")},te),i.createElement(Dr,{"aria-label":te,className:"".concat(Q,"--icon-chevron--down ").concat(Q,"--snippet__icon"),name:"chevron--down",role:"img"})))}kE.propTypes={ariaLabel:P().string,children:P().node,className:P().string,copyButtonDescription:P().string,copyText:P().string,disabled:P().bool,feedback:P().string,feedbackTimeout:P().number,hideCopyButton:P().bool,light:P().bool,maxCollapsedNumberOfRows:P().number,maxExpandedNumberOfRows:P().number,minCollapsedNumberOfRows:P().number,minExpandedNumberOfRows:P().number,onClick:P().func,showLessText:P().string,showMoreText:P().string,type:P().oneOf(["single","inline","multi"]),wrapText:P().bool},kE.defaultProps={ariaLabel:"Copy to clipboard",type:"single",showMoreText:"Show more",showLessText:"Show less",wrapText:!1};var NE=["children","size"],ZE=["children","size"],YE=["children","size"],PE=["children","size"],jE=["children","size"],KE=["children","size"],GE=["children","size"],QE=["children","size"],JE=["children","size"],$E=["children","size"],ew=["children","size"],iw=["children","size"],tw=["children","size"],_w=["children","size"],sw=["children","size"],aw=["children","size"],nw=["children","size"],rw=["children","size"],lw=["children","size"],dw=["children","size"],ow=["children","size"],mw=["children","size"],vw=["children","size"],cw=["children","size"],uw=["children","size"],fw=["children","size"],bw=["children","size"],pw=["children","size"],gw=["children","size"],Ew=["children","size"],ww=["children","size"],hw=["children","size"],xw=["children","size"],zw=["children","size"],Lw=["children","size"],Mw=["children","size"],Rw=["children","size"],Sw=["children","size"],Dw=["children","size"],yw=["children","size"],Vw=["children","size"],Aw=["children","size"],Tw=["children","size"],Ww=["children","size"],Uw=["children","size"],Iw=["children","size"],Bw=["children","size"],Ow=["children","size"],Fw=["children","size"],qw=["children","size"],Xw=["children","size"],Cw=["children","size"],Hw=["children","size"],kw=["children","size"],Nw=["children","size"],Zw=["children","size"],Yw=["children","size"],Pw=["children","size"],jw=["children","size"],Kw=["children","size"],Gw=["children","size"],Qw=["children","size"],Jw=["children","size"],$w=["children","size"],eh=["children","size"],ih=["children","size"],th=["children","size"],_h=["children","size"],sh=["children","size"],ah=["children","size"],nh=["children","size"],rh=["children","size"],lh=["children","size"],dh=["children","size"],oh=["children","size"],mh=["children","size"],vh=["children","size"],ch=["children","size"],uh=["children","size"],fh=["children","size"],bh=["children","size"],ph=["children","size"],gh=["children","size"],Eh=["children","size"],wh=["children","size"],hh=["children","size"],xh=["children","size"],zh=["children","size"],Lh=["children","size"],Mh=["children","size"],Rh=["children","size"],Sh=["children","size"],Dh=["children","size"],yh=["children","size"],Vh=["children","size"],Ah=["children","size"],Th=["children","size"],Wh=["children","size"],Uh=["children","size"],Ih=["children","size"],Bh=["children","size"],Oh=["children","size"],Fh=["children","size"],qh=["children","size"],Xh=["children","size"],Ch=["children","size"],Hh=["children","size"],kh=["children","size"],Nh=["children","size"],Zh=["children","size"],Yh=["children","size"],Ph=["children","size"],jh=["children","size"],Kh=["children","size"],Gh=["children","size"],Qh=["children","size"],Jh=["children","size"],$h=["children","size"],ex=["children","size"],ix=["children","size"],tx=["children","size"],_x=["children","size"],sx=["children","size"],ax=["children","size"],nx=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,NE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cf||(Cf=i.createElement("path",{d:"M16 31H14v-.228a3.0135 3.0135 0 00-1.9468-2.8091L8.5215 26.6384A3.9034 3.9034 0 016 23H8a1.8946 1.8946 0 001.2236 1.7659L12.7554 26.09A5.0226 5.0226 0 0116 30.772zM30 31H28v-.228a3.0135 3.0135 0 00-1.9468-2.8091l-3.5317-1.3245A3.9034 3.9034 0 0120 23h2a1.8946 1.8946 0 001.2236 1.7659L26.7554 26.09A5.0226 5.0226 0 0130 30.772zM11 13H17V15H11z"})),Hf||(Hf=i.createElement("path",{d:"M23.4409,8,22.1687,3.45A2.009,2.009,0,0,0,20.2456,2H7.7544A2.0089,2.0089,0,0,0,5.8313,3.4507L4.5315,8H2v2H4v7a2.0025,2.0025,0,0,0,2,2v2H8V19H20v2h2V19a2.0025,2.0025,0,0,0,2-2V10h2V8ZM7.7544,4H20.2458l1.4285,5H6.3257ZM22,13H20v2h2v2H6V15H8V13H6V11H22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ZE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kf||(kf=i.createElement("path",{d:"M12 30H4a2.0023 2.0023 0 01-2-2V24a2.0023 2.0023 0 012-2h8a2.0023 2.0023 0 012 2v4A2.0023 2.0023 0 0112 30zM4 24v4h8V24zM28 20H12a2.0023 2.0023 0 01-2-2V14a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2v4A2.0023 2.0023 0 0128 20zM12 14v4H28V14zM16 10H4A2.0023 2.0023 0 012 8V4A2.0023 2.0023 0 014 2H16a2.0023 2.0023 0 012 2V8A2.0023 2.0023 0 0116 10zM4 4V8H16V4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,YE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nf||(Nf=i.createElement("path",{d:"M6.34 19H17.65V21H6.34z",transform:"rotate(-45 11.995 20.002)"})),Zf||(Zf=i.createElement("path",{d:"M17,30a1,1,0,0,1-.37-.07,1,1,0,0,1-.62-.79l-1-7,2-.28.75,5.27L21,24.52V17a1,1,0,0,1,.29-.71l4.07-4.07A8.94,8.94,0,0,0,28,5.86V4H26.14a8.94,8.94,0,0,0-6.36,2.64l-4.07,4.07A1,1,0,0,1,15,11H7.48L4.87,14.26l5.27.75-.28,2-7-1a1,1,0,0,1-.79-.62,1,1,0,0,1,.15-1l4-5A1,1,0,0,1,7,9h7.59l3.77-3.78A10.92,10.92,0,0,1,26.14,2H28a2,2,0,0,1,2,2V5.86a10.92,10.92,0,0,1-3.22,7.78L23,17.41V25a1,1,0,0,1-.38.78l-5,4A1,1,0,0,1,17,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,PE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yf||(Yf=i.createElement("path",{d:"M17.91 26.82l.35 2a12.9 12.9 0 004.24-1.54l-1-1.73A10.88 10.88 0 0117.91 26.82zM24.42 23.07L26 24.35a13 13 0 002.24-3.91l-1.87-.68A11 11 0 0124.42 23.07zM9.5 27.25a12.9 12.9 0 004.24 1.54l.35-2a10.88 10.88 0 01-3.59-1.3zM5.67 19.76l-1.87.68A13 13 0 006 24.35l.32-.26 1.22-1h0a11 11 0 01-1.91-3.31zM29 16a12.85 12.85 0 00-.8-4.44l-1.87.68A11.18 11.18 0 0127 16zM26 7.65a13 13 0 00-20 0V4H4v8h8V10H6.81A11 11 0 0124.42 8.93z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pf||(Pf=i.createElement("path",{d:"M14.0913 26.8235l-.3467 1.968a12.8956 12.8956 0 01-4.24-1.5418l1-1.7307A10.9086 10.9086 0 0014.0913 26.8235zM7.5767 23.0682L6.0449 24.3533a12.9811 12.9811 0 01-2.25-3.9112l1.8775-.6834A10.9808 10.9808 0 007.5767 23.0682zM22.4951 27.25a12.8956 12.8956 0 01-4.24 1.5418l-.3467-1.968a10.9086 10.9086 0 003.5869-1.3045zM26.3271 19.7587l1.8775.6834a12.9811 12.9811 0 01-2.2495 3.9112l-.3115-.2614-1.22-1.0237h0a10.9822 10.9822 0 001.9038-3.3093zM13.6616 5.2559c-.1592.0346-.3144.08-.4712.1215-.2131.0562-.4258.1138-.6335.1822-.1643.0547-.325.1167-.4859.1782-.1926.0742-.3835.1509-.57.2349-.1611.0727-.3193.15-.4763.23q-.2677.1363-.5262.2867c-.153.0893-.3046.18-.4531.2758-.1679.1089-.3308.2242-.4922.3413-.1406.1026-.2817.2037-.417.3125-.1616.1294-.3156.2676-.47.4063-.1225.11-.2478.2168-.3652.332-.1668.1636-.3223.3379-.4785.5117A10.9438 10.9438 0 005 16H3A12.9363 12.9363 0 016.05 7.65l-.0047-.0039c.0918-.1094.197-.2061.2925-.3125.1841-.2051.3672-.41.5635-.603.1382-.1358.2856-.2613.43-.3907.1831-.1645.3657-.3286.5581-.4824.1592-.1279.3244-.2466.4895-.3667.1921-.14.3855-.2768.5854-.4062.1743-.1128.3523-.2188.5322-.3238q.3081-.1786.6253-.3408c.1846-.0942.37-.1846.56-.27.2224-.1.449-.1914.678-.2793.1894-.0723.3777-.1455.5713-.209.2463-.0815.498-.1494.7507-.2163.1848-.0493.3674-.1025.5554-.1431.29-.0634.5865-.1074.8833-.1508.159-.023.3145-.0552.4754-.0728A12.9331 12.9331 0 0126 7.7031V4h2v8H20V10h5.1885A10.961 10.961 0 0016 5a11.1114 11.1114 0 00-1.189.0669c-.1362.0146-.268.042-.4026.0615C14.1575 5.165 13.907 5.2026 13.6616 5.2559z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,KE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jf||(jf=i.createElement("path",{d:"M25.95,7.65l.0047-.0039c-.0918-.1094-.197-.2061-.2925-.3125-.1841-.2051-.3672-.41-.5635-.603-.1382-.1358-.2856-.2613-.43-.3907-.1831-.1645-.3657-.3286-.5581-.4824-.1592-.1279-.3244-.2466-.4895-.3667-.1921-.14-.3855-.2768-.5854-.4062-.1743-.1128-.3523-.2188-.5322-.3238q-.3081-.1786-.6253-.3408c-.1846-.0942-.37-.1846-.56-.27-.2224-.1-.449-.1914-.678-.2793-.1894-.0723-.3777-.1455-.5713-.209-.2463-.0815-.498-.1494-.7507-.2163-.1848-.0493-.3674-.1025-.5554-.1431-.29-.0634-.5865-.1074-.8833-.1508-.159-.023-.3145-.0552-.4754-.0728A12.9331,12.9331,0,0,0,6,7.7031V4H4v8h8V10H6.8115A10.961,10.961,0,0,1,16,5a11.1114,11.1114,0,0,1,1.189.0669c.1362.0146.268.042.4026.0615.2509.0366.5014.0742.7468.1275.1592.0346.3144.08.4712.1215.2131.0562.4258.1138.6335.1822.1643.0547.325.1167.4859.1782.1926.0742.3835.1509.5705.2349.1611.0727.3193.15.4763.23q.2677.1363.5262.2867c.153.0893.3046.18.4531.2758.1679.1089.3308.2242.4922.3413.1406.1026.2817.2037.417.3125.1616.1294.3156.2676.47.4063.1225.11.2478.2168.3652.332.1668.1636.3223.3379.4785.5117A10.9928,10.9928,0,1,1,5,16H3A13,13,0,1,0,25.95,7.65Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,GE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kf||(Kf=i.createElement("path",{d:"M28 30H16a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM16 16V28H28.0012L28 16zM15 2L13.59 3.41 16.17 6H11a7.0078 7.0078 0 00-7 7v5H6V13a5.0057 5.0057 0 015-5h5.17l-2.58 2.59L15 12l5-5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,QE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gf||(Gf=i.createElement("path",{d:"M16 30H4a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0116 30zM4 16V28H16.0012L16 16zM30 15l-1.41-1.41L26 16.17V11a7.0078 7.0078 0 00-7-7H14V6h5a5.0057 5.0057 0 015 5v5.17l-2.59-2.58L20 15l5 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,JE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qf||(Qf=i.createElement("path",{d:"M16 30H4a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0116 30zM30 15l-1.41-1.41L26 16.17V11a7.0078 7.0078 0 00-7-7H14V6h5a5.0057 5.0057 0 015 5v5.17l-2.59-2.58L20 15l5 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$E);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jf||(Jf=i.createElement("path",{d:"M28 30H16a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM15 2L13.59 3.41 16.17 6H11a7.0078 7.0078 0 00-7 7v5H6V13a5.0057 5.0057 0 015-5h5.17l-2.58 2.59L15 12l5-5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ew);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$f||($f=i.createElement("path",{d:"M2 28V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H4A2.0023 2.0023 0 012 28zM4 16L3.9988 28H16V16zM17 2l1.41 1.41L15.83 6H21a7.0078 7.0078 0 017 7v5H26V13a5.0057 5.0057 0 00-5-5H15.83l2.58 2.59L17 12 12 7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,iw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),eb||(eb=i.createElement("path",{d:"M14 28V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H16A2.0023 2.0023 0 0114 28zm2-12l-.0012 12H28V16zM2 15l1.41-1.41L6 16.17V11a7.0078 7.0078 0 017-7h5V6H13a5.0057 5.0057 0 00-5 5v5.17l2.59-2.58L12 15 7 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ib||(ib=i.createElement("path",{d:"M14 28V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H16A2.0023 2.0023 0 0114 28zM2 15l1.41-1.41L6 16.17V11a7.0078 7.0078 0 017-7h5V6H13a5.0057 5.0057 0 00-5 5v5.17l2.59-2.58L12 15 7 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_w);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tb||(tb=i.createElement("path",{d:"M2 28V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H4A2.0023 2.0023 0 012 28zM17 2l1.41 1.41L15.83 6H21a7.0078 7.0078 0 017 7v5H26V13a5.0057 5.0057 0 00-5-5H15.83l2.58 2.59L17 12 12 7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_b||(_b=i.createElement("path",{d:"M21 7L16 2 11 7 12.409 8.419 15 5.847 15 13 17 13 17 5.794 19.591 8.419 21 7zM21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,aw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sb||(sb=i.createElement("path",{d:"M21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11zM12.4289 5.8227v1.63a1.1269 1.1269 0 01-.6767 1.026l-1.39.5967A1.1218 1.1218 0 019.14 8.8424L7.3208 7.0233a1.1165 1.1165 0 01.0125-1.579l.0348-.0328c7.393-6.527 14.6913-2.0374 17.2127-.0473a1.1166 1.1166 0 01.1746 1.5693 1.1011 1.1011 0 01-.0873.0971L22.9108 8.7878a1.1114 1.1114 0 01-1.2225.2329l-1.39-.5967a1.1112 1.1112 0 01-.68-1.0223v-1.63S15.9726 3.0648 12.4289 5.8227z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ab||(ab=i.createElement("circle",{cx:"16",cy:"13.5",r:"1.5"})),nb||(nb=i.createElement("path",{d:"M19.5356,10.4648a5,5,0,0,0-7.0717,0L11.05,9.0508a6.9992,6.9992,0,0,1,9.9,0Z"})),rb||(rb=i.createElement("path",{d:"M23.0713 6.929a10 10 0 00-14.1426 0L7.5146 5.5144a12.0011 12.0011 0 0116.9708 0zM21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lb||(lb=i.createElement("path",{d:"M4 24H28V26H4zM26 18H6V14H26v4m2 0V14a2 2 0 00-2-2H6a2 2 0 00-2 2v4a2 2 0 002 2H26a2 2 0 002-2zM4 6H28V8H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),db||(db=i.createElement("path",{d:"M26 20H6a2 2 0 00-2 2v4a2 2 0 002 2H26a2 2 0 002-2V22A2 2 0 0026 20zm0 6H6V22H26zM17 7.828L19.586 10.414 21 9 16 4 11 9 12.414 10.414 15 7.828 15 14 4 14 4 16 28 16 28 14 17 14 17 7.828z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ob||(ob=i.createElement("path",{d:"M24 30H4a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H24a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0124 30zM4 22H3.9985L4 28H24V22zM30 3.41L28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41z"})),mb||(mb=i.createElement("path",{d:"M4,14V8H18V6H4A2.0023,2.0023,0,0,0,2,8v6a2.0023,2.0023,0,0,0,2,2H26V14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ow);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vb||(vb=i.createElement("path",{d:"M4 18L15 18 15 24.172 12.414 21.586 11 23 16 28 21 23 19.586 21.586 17 24.172 17 18 28 18 28 16 4 16 4 18zM26 4H6A2 2 0 004 6v4a2 2 0 002 2H26a2 2 0 002-2V6A2 2 0 0026 4zm0 6H6V6H26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cb||(cb=i.createElement("path",{d:"M28 12H10a2.0021 2.0021 0 01-2-2V4a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 12zM10 4v6H28V4zM28 30H10a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 30zM10 22v6H28V22zM9 16L3.414 10.414 2 11.828 6.172 16 2 20.172 3.414 21.586 9 16z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ub||(ub=i.createElement("path",{d:"M8 18c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6C14 20.7 11.3 18 8 18zM8 28c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4C12 26.2 10.2 28 8 28zM30 24h-2C28 13 19 4 8 4V2C20.1 2 30 11.9 30 24z"})),fb||(fb=i.createElement("path",{d:"M22,24h-2c0-6.6-5.4-12-12-12v-2C15.7,10,22,16.3,22,24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bb||(bb=i.createElement("path",{d:"M10 16H22V18H10zM10 10H22V12H10z"})),pb||(pb=i.createElement("path",{d:"M16,30,9.8242,26.7071A10.9815,10.9815,0,0,1,4,17V4A2.0022,2.0022,0,0,1,6,2H26a2.0022,2.0022,0,0,1,2,2V17a10.9815,10.9815,0,0,1-5.8242,9.7069ZM6,4V17a8.9852,8.9852,0,0,0,4.7656,7.9423L16,27.7333l5.2344-2.791A8.9852,8.9852,0,0,0,26,17V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gb||(gb=i.createElement("path",{d:"M30 24a6 6 0 10-6 6A6.0066 6.0066 0 0030 24zm-2 0a3.9521 3.9521 0 01-.5669 2.019L21.981 20.5669A3.9529 3.9529 0 0124 20 4.0045 4.0045 0 0128 24zm-8 0a3.9521 3.9521 0 01.5669-2.019l5.4521 5.4521A3.9529 3.9529 0 0124 28 4.0045 4.0045 0 0120 24zM8 16H18V18H8zM8 10H20V12H8z"})),Eb||(Eb=i.createElement("path",{d:"M14,27.7334l-5.2344-2.791A8.9858,8.9858,0,0,1,4,17V4H24l0,11h2L26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L14,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wb||(wb=i.createElement("path",{d:"M29.707 19.293l-3-3a.9994.9994 0 00-1.414 0L16 25.5859V30h4.4141l9.2929-9.293A.9994.9994 0 0029.707 19.293zM19.5859 28H18V26.4141l5-5L24.5859 23zM26 21.5859L24.4141 20 26 18.4141 27.5859 20zM8 16H18V18H8zM8 10H20V12H8z"})),hb||(hb=i.createElement("path",{d:"M26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L13,29.4668V27.2L8.7656,24.9424A8.9858,8.9858,0,0,1,4,17V4H24v9h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xb||(xb=i.createElement("path",{fill:"none",d:"M9 16H23V18H9z","data-icon-path":"inner-path"})),zb||(zb=i.createElement("path",{fill:"none",d:"M9 10H23V12H9z"})),Lb||(Lb=i.createElement("path",{d:"M26,2H6A2.0023,2.0023,0,0,0,4,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L16,30l6.1758-3.293A10.9814,10.9814,0,0,0,28,17V4A2.0023,2.0023,0,0,0,26,2ZM23,18H9V16H23Zm0-6H9V10H23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mb||(Mb=i.createElement("path",{d:"M23,30a7,7,0,1,1,7-7A7.0078,7.0078,0,0,1,23,30Zm0-12a5,5,0,1,0,5,5A5.0055,5.0055,0,0,0,23,18Z"})),Rb||(Rb=i.createElement("path",{d:"M26 24.586L24 22.586 24 20 22 20 22 23.414 24.586 26 26 24.586zM8 16H14V18H8zM8 10H20V12H8z"})),Sb||(Sb=i.createElement("path",{d:"M26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L13,29.4668V27.2L8.7656,24.9424A8.9858,8.9858,0,0,1,4,17V4H24v9h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Db||(Db=i.createElement("path",{d:"M29,10H3a1,1,0,0,0-1,1V21a1,1,0,0,0,1,1H29a1,1,0,0,0,1-1V11A1,1,0,0,0,29,10ZM28,20H4V12H8v4h2V12h5v4h2V12h5v4h2V12h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ew);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yb||(yb=i.createElement("path",{d:"M29.41,21.67,10.34,2.58a2,2,0,0,0-2.83,0L2.59,7.51a2,2,0,0,0,0,2.82L21.66,29.42a2,2,0,0,0,1.42.58,2,2,0,0,0,1.41-.58l4.92-4.93A2,2,0,0,0,29.41,21.67ZM23.08,28,4,8.92,8.92,4l3.79,3.79L10.46,10l1.41,1.41L14.12,9.2l4.13,4.13L16,15.58,17.42,17l2.25-2.25,4.13,4.13-2.25,2.25L23,22.54l2.25-2.25L28,23.08Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ww);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vb||(Vb=i.createElement("path",{d:"M21,16a6,6,0,1,1-6,6,6,6,0,0,1,6-6m0-2a8,8,0,1,0,8,8,8,8,0,0,0-8-8Z"})),Ab||(Ab=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2h4V26H6V12H28V6A2,2,0,0,0,26,4ZM6,10V6H26v4Z"})),Tb||(Tb=i.createElement("path",{d:"M19 19L19 25 24 22 19 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wb||(Wb=i.createElement("path",{d:"M18,23H12V21h6V17H14a2,2,0,0,1-2-2V11a2,2,0,0,1,2-2h6v2H14v4h4a2,2,0,0,1,2,2v4A2,2,0,0,1,18,23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ub||(Ub=i.createElement("path",{d:"M24 9L22 9 22 7 20 7 20 9 18 9 18 11 20 11 20 17 22 17 22 11 24 11 24 9zM14 23H8V21h6V17H10a2 2 0 01-2-2V11a2 2 0 012-2h6v2H10v4h4a2 2 0 012 2v4A2 2 0 0114 23z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ib||(Ib=i.createElement("path",{d:"M24.7808,26,25.97,21.2422A1,1,0,0,0,25,20H20V17h5a1,1,0,0,0,.9082-1.4189l-6-13a1.0006,1.0006,0,0,0-1.7021-.19L8.2075,15.3906A1,1,0,0,0,9,17h9v3H7a1,1,0,0,0-.97,1.2422L7.2192,26H2v2H30V26ZM20,7.5527,23.437,15H20ZM11.0308,15,18,5.94V15ZM22.7192,26H9.2808l-1-4H23.7192Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bb||(Bb=i.createElement("path",{d:"M6.9692,25H9.0308l-.75-3H23.7192l-.75,3h2.0616l.9394-3.7578A1,1,0,0,0,25,20H20V17h5a1,1,0,0,0,.9082-1.4189l-6-13a1.0006,1.0006,0,0,0-1.7021-.19L8.2075,15.3906A1,1,0,0,0,9,17h9v3H7a1,1,0,0,0-.97,1.2422ZM20,7.5527,23.437,15H20ZM11.0308,15,18,5.94V15Z"})),Ob||(Ob=i.createElement("path",{d:"M26.9058,25.751A2.998,2.998,0,0,1,24,28a3.4376,3.4376,0,0,1-3.0513-2.3164A1.007,1.007,0,0,0,20,25a.9894.9894,0,0,0-.9468.6787A3.44,3.44,0,0,1,16,28a3.4376,3.4376,0,0,1-3.0513-2.3164A1.007,1.007,0,0,0,12,25a.971.971,0,0,0-.9468.6787A3.44,3.44,0,0,1,8,28a2.998,2.998,0,0,1-2.9058-2.249l-1.9365.498A4.9965,4.9965,0,0,0,8,30a4.9316,4.9316,0,0,0,4-1.9873,5.0192,5.0192,0,0,0,8,0A4.9316,4.9316,0,0,0,24,30a4.9965,4.9965,0,0,0,4.8423-3.751Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fb||(Fb=i.createElement("path",{d:"M28,2V8.0439c-1.9634.1968-6.3162,1.2325-10.5637,6.2764-.198-.2768-.3982-.5464-.5882-.8506C11.9736,5.6714,6.3191,4.2759,4,4.042V2H2V30H4V26.0464a14.8661,14.8661,0,0,0,9.9185-3.96C18.47,27.46,25.2363,28.0381,27.9341,28.0381c.0244,0,.0422-.001.0659-.001V30h2V2Zm0,8.0552v9.99a12.8834,12.8834,0,0,1-9.2756-4.1328C22.5032,11.2666,26.2915,10.26,28,10.0552ZM15.1519,14.53c.3242.5185.663.9907,1.0078,1.4409-.3384.4741-.6753.9707-1.0078,1.5029a16.1346,16.1346,0,0,1-1.0313,1.4531c-.0825-.1372-.1675-.27-.2466-.4126C9.3279,10.3315,5.7871,8.4438,4,8.0684V6.0508C5.9932,6.2905,10.8228,7.6035,15.1519,14.53ZM4,24.0488V10.1406c1.3254.4644,4.2034,2.2847,8.126,9.3448.1894.3413.396.6523.6.9667A12.8784,12.8784,0,0,1,4,24.0488Zm11.3179-3.4209a18.0563,18.0563,0,0,0,1.53-2.0937c.2212-.354.4454-.67.6687-.9951A14.8686,14.8686,0,0,0,28,22.0425v3.9863C25.67,26.019,19.374,25.5088,15.3179,20.6279Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qb||(qb=i.createElement("path",{d:"M30,2H2V16H8.1113a7.0359,7.0359,0,0,1,3.13.7393L15.7637,19l-4.522,2.2607A7.0359,7.0359,0,0,1,8.1113,22H2v8H9.2231a9.0446,9.0446,0,0,0,4.0249-.95L21.87,24.7393A7.0359,7.0359,0,0,1,25,24h5V14H25a7.0359,7.0359,0,0,1-3.13-.7393L15.3481,10H30ZM8,4H24V8H8ZM4,4H6V14H4ZM4,24H6v4H4Zm16.9751-1.05-8.6216,4.3105A7.0359,7.0359,0,0,1,9.2231,28H8V24h.1113a9.0446,9.0446,0,0,0,4.0249-.95L18,20.1182l1.8638.9316a9.0446,9.0446,0,0,0,4.0249.95H24v.0586A9.0515,9.0515,0,0,0,20.9751,22.95ZM28,22H26V16h2ZM12.3535,10.7393l8.6216,4.31A9.0515,9.0515,0,0,0,24,15.9414V20h-.1113a7.0359,7.0359,0,0,1-3.13-.7393l-8.6221-4.31A9.0446,9.0446,0,0,0,8.1113,14H8V10H9.2231A7.0359,7.0359,0,0,1,12.3535,10.7393ZM28,8H26V4h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xb||(Xb=i.createElement("path",{d:"M22.9141,16.5l2.7929-2.793a.9994.9994,0,0,0,0-1.414L23.4141,10,25.5,7.9141,28.5859,11,30,9.5859,22.4141,2,21,3.4141,24.0859,6.5,22,8.5859,19.707,6.293a.9994.9994,0,0,0-1.414,0L15.5,9.0859,8.707,2.293a.9994.9994,0,0,0-1.414,0l-5,5a.9994.9994,0,0,0,0,1.414L9.0859,15.5,6.293,18.293a.9994.9994,0,0,0,0,1.414L8.5859,22,6.5,24.0859,3.4141,21,2,22.4141,9.5859,30,11,28.5859,7.9141,25.5,10,23.4141l2.293,2.2929a.9995.9995,0,0,0,1.414,0L16.5,22.9141l6.793,6.7929a.9995.9995,0,0,0,1.414,0l5-5a.9994.9994,0,0,0,0-1.414ZM4.4141,8,8,4.4141,10.0859,6.5,6.5,10.0859Zm3.5,3.5L11.5,7.9141,14.0859,10.5,10.5,14.0859ZM13,23.5859,8.4141,19,19,8.4141,23.5859,13ZM17.9141,21.5,21.5,17.9141,24.0859,20.5,20.5,24.0859ZM24,27.5859,21.9141,25.5,25.5,21.9141,27.5859,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cb||(Cb=i.createElement("path",{d:"M30,14H28A10.0113,10.0113,0,0,0,18,4V2A12.0137,12.0137,0,0,1,30,14Z"})),Hb||(Hb=i.createElement("path",{d:"M26 14H24a6.0067 6.0067 0 00-6-6V6A8.0092 8.0092 0 0126 14zM16 28V24.96a9.9124 9.9124 0 007.3179-2.208 1.8482 1.8482 0 00.6777-1.3344 1.8 1.8 0 00-.5239-1.36L18.4141 15 21 12.4141 19.5859 11 17 13.5859 11.9419 8.5273a1.8145 1.8145 0 00-1.36-.5229 1.845 1.845 0 00-1.3339.6782 9.9566 9.9566 0 00-.5127 11.95L6.2793 28H2v2H30V28zM10.68 10.0938L21.9058 21.32A8.0011 8.0011 0 0110.68 10.0938zM14 28H8.3875l1.8757-5.627A9.9894 9.9894 0 0014 24.5435z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kb||(kb=i.createElement("path",{d:"M26.5 12H19a4 4 0 010-8h.0835A4.7864 4.7864 0 0123 2a4.9816 4.9816 0 014.6543 3.2034A3.4667 3.4667 0 0130 8.5 3.5041 3.5041 0 0126.5 12zM19 6a2 2 0 000 4h7.5A1.5017 1.5017 0 0028 8.5a1.4855 1.4855 0 00-1.2778-1.4739L26.061 6.927l-.1616-.6487a2.9568 2.9568 0 00-5.4873-.7121L20.1143 6zM13 28V24.8882a7.9363 7.9363 0 004.707-2.2818.9995.9995 0 000-1.414L13.4644 16.95 16 14.4141 14.5859 13 12.05 15.5356 7.8076 11.293a.9994.9994 0 00-1.414 0 7.9993 7.9993 0 000 11.3134c.1621.1622.3327.3125.5058.459L4.4321 28H2v2H30V28zm-2 0H6.6685L8.59 24.1567A7.8927 7.8927 0 0011 24.873zM7.8076 21.1924a6.0036 6.0036 0 01-.6489-7.72l8.3686 8.3681a6.0026 6.0026 0 01-7.72-.6484z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vw);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Nb||(Nb=i.createElement("path",{d:"M13.9,4.6l-2.5-2.5C11.3,2.1,11.1,2,11,2H3C2.4,2,2,2.4,2,3v10c0,0.6,0.4,1,1,1h10c0.6,0,1-0.4,1-1V5 C14,4.9,13.9,4.7,13.9,4.6z M6,3h4v2H6V3z M10,13H6V9h4V13z M11,13V9c0-0.6-0.4-1-1-1H6C5.4,8,5,8.4,5,9v4H3V3h2v2c0,0.6,0.4,1,1,1 h4c0.6,0,1-0.4,1-1V3.2l2,2V13H11z"})),_):20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Zb||(Zb=i.createElement("path",{d:"M17.8,5.5l-3.3-3.3C14.3,2.1,14.2,2,14,2H3.3C2.6,2,2,2.6,2,3.3v13.3C2,17.4,2.6,18,3.3,18h13.3c0.7,0,1.4-0.5,1.4-1.2V6.1 C18,5.7,17.9,5.7,17.8,5.5z M7.3,3.3h5.3v3.3H7.3V3.3z M12.7,16.7H7.3v-5.3h5.3L12.7,16.7L12.7,16.7z M14,16.7v-5.3 c0-0.7-0.6-1.3-1.3-1.3H7.3C6.6,10,6,10.6,6,11.3v5.3H3.3V3.3H6v3.3C6,7.4,6.6,8,7.3,8h5.3C13.4,8,14,7.4,14,6.7v-3l2.7,2.7v10.4 L14,16.7L14,16.7z"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Yb||(Yb=i.createElement("path",{d:"M20.8,7L17,3.2C16.9,3.1,16.7,3,16.5,3h-12C3.7,3,3,3.7,3,4.5v15C3,20.3,3.7,21,4.5,21h15c0.8,0,1.5-0.7,1.5-1.5v-12 C21,7.3,20.9,7.1,20.8,7z M9,4.5h6v3H9V4.5z M15,19.5H9v-6h6V19.5z M16.5,19.5v-6c0-0.8-0.7-1.5-1.5-1.5H9c-0.8,0-1.5,0.7-1.5,1.5v6 h-3v-15h3v3C7.5,8.3,8.2,9,9,9h6c0.8,0,1.5-0.7,1.5-1.5V4.8l3,3v11.7H16.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pb||(Pb=i.createElement("path",{d:"M27.71,9.29l-5-5A1,1,0,0,0,22,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V10A1,1,0,0,0,27.71,9.29ZM12,6h8v4H12Zm8,20H12V18h8Zm2,0V18a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2v8H6V6h4v4a2,2,0,0,0,2,2h8a2,2,0,0,0,2-2V6.41l4,4V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Aw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jb||(jb=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),Kb||(Kb=i.createElement("path",{d:"M28,20H25V18h3V4H8V7H6V4A2,2,0,0,1,8,2H28a2,2,0,0,1,2,2V18A2,2,0,0,1,28,20Z"})),Gb||(Gb=i.createElement("path",{d:"M20 6H26V8H20zM22 10H26V12H22z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qb||(Qb=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),Jb||(Jb=i.createElement("path",{d:"M28,20H25V18h3V4H14V7H12V4a2,2,0,0,1,2-2H28a2,2,0,0,1,2,2V18A2,2,0,0,1,28,20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ww);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$b||($b=i.createElement("path",{d:"M26,20l1.4272,1.9028L23,26.9629l-4.4272-5.06L20,20h6m1-2H19l-3,4,7,8,7-8-3-4Z"})),ep||(ep=i.createElement("path",{d:"M16,26H12V18h2V16H12a2,2,0,0,0-2,2v8H6V6h4v4a2,2,0,0,0,2,2h8a2,2,0,0,0,2-2V6.41l4,4V16h2V10a1,1,0,0,0-.29-.71l-5-5A.9989.9989,0,0,0,22,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H16ZM12,6h8v4H12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ip||(ip=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),tp||(tp=i.createElement("path",{d:"M27,21H25V7H11V5H25a2,2,0,0,1,2,2Z"})),_p||(_p=i.createElement("path",{d:"M32,14H30V2H18V0H30a2,2,0,0,1,2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Iw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sp||(sp=i.createElement("path",{d:"M13,17H7a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V19A2,2,0,0,0,13,17ZM7,25V19h6v6Z"})),ap||(ap=i.createElement("path",{d:"M19,21v2h6a2,2,0,0,0,2-2V7a2,2,0,0,0-2-2H11A2,2,0,0,0,9,7v6h2V7H25V21"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),np||(np=i.createElement("path",{d:"M20,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L25.896,7.5562a.8913.8913,0,0,0-.0454-.0816A1,1,0,0,0,25,7H18.8218A3.0155,3.0155,0,0,0,17,5.1841V2H15V5.1841A3.0155,3.0155,0,0,0,13.1782,7H7a1,1,0,0,0-.8945.5527l-4,8A1,1,0,0,0,2,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L8.6182,9h4.56A3.0147,3.0147,0,0,0,15,10.8154V28H6v2H26V28H17V10.8159A3.0155,3.0155,0,0,0,18.8218,9h4.56l-3.2763,6.5527A1,1,0,0,0,20,16ZM7,19a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,7,19Zm2.3821-4H4.6179L7,10.2363ZM16,9a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,16,9Zm9,10a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,25,19Zm0-8.7637L27.3821,15H22.6179Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ow);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rp||(rp=i.createElement("path",{d:"M20,13a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473l-4-8a1,1,0,0,0-1.2109-.5014l-6.3308,2.11A3.0322,3.0322,0,0,0,17,5.1841V2H15V5.1841a2.9949,2.9949,0,0,0-1.9956,2.76l-6.3208,2.107a1,1,0,0,0-.5781.5014l-4,8A1,1,0,0,0,2,19a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L8.41,11.584l5.237-1.7456A3.0285,3.0285,0,0,0,15,10.8154V28H6v2H26V28H17V10.8159a2.9951,2.9951,0,0,0,1.9956-2.76l4.03-1.3438-2.92,5.8408A1,1,0,0,0,20,13ZM7,22a2.9956,2.9956,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,7,22Zm2.3821-4H4.6179L7,13.2363ZM16,9a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,16,9Zm9,7a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,25,16Zm0-8.7637L27.3821,12H22.6179Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lp||(lp=i.createElement("path",{d:"M28.83,5.17a4.1,4.1,0,0,0-5.66,0L.34,28H9.59a5,5,0,0,0,3.53-1.46L28.83,10.83a4,4,0,0,0,0-5.66ZM12.29,18.88l2.09-2.09,2.83,2.83-2.09,2.09Zm-.58,6.24A3,3,0,0,1,9.59,26H5.17l5.71-5.71,2.83,2.83ZM27.41,9.41l-8.79,8.8-2.83-2.83,8.8-8.79a2,2,0,0,1,2.82,0,2,2,0,0,1,0,2.82Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dp||(dp=i.createElement("path",{d:"M28.8281 7.1338a4.0941 4.0941 0 00-5.6562 0L.3433 29.9619H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.79a3.9984 3.9984 0 000-5.6562zM12.2928 20.8406l2.086-2.0858 2.8293 2.8293L15.1224 23.67zM11.71 27.083a2.9824 2.9824 0 01-2.1215.8789H5.1714l5.7073-5.7072 2.83 2.83zM27.4141 11.376L18.6221 20.17l-2.8293-2.8292 8.7931-8.7928a2.0471 2.0471 0 012.8282 0 1.9993 1.9993 0 010 2.8281zM13 4L4 4 4 13 6 13 6 6 13 6 13 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),op||(op=i.createElement("path",{d:"M28.8281 7.1338a4.0941 4.0941 0 00-5.6562 0L.3433 29.9619H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.79a3.9984 3.9984 0 000-5.6562zM12.2928 20.8406l2.086-2.0858 2.8293 2.8293L15.1224 23.67zM11.71 27.083a2.9824 2.9824 0 01-2.1215.8789H5.1714l5.7073-5.7072 2.83 2.83zM27.4141 11.376L18.6221 20.17l-2.8293-2.8292 8.7931-8.7928a2.0471 2.0471 0 012.8282 0 1.9993 1.9993 0 010 2.8281zM11 2H7a4.9843 4.9843 0 00-3.8633 8.1528A2.9586 2.9586 0 003 11a2.9945 2.9945 0 002 2.8154V14a2.0025 2.0025 0 01-2 2H2v2H3a4.0045 4.0045 0 004-4v-.1841A2.9959 2.9959 0 008.8157 12H11A5 5 0 0011 2zM6 12a1 1 0 111-1A1.0009 1.0009 0 016 12zm5-2H8.8157A2.974 2.974 0 004.394 8.4746 2.9908 2.9908 0 017 4h4a3 3 0 010 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mp||(mp=i.createElement("path",{d:"M28.8281 7.1719a4.0941 4.0941 0 00-5.6562 0L.3433 30H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.8281a3.9984 3.9984 0 000-5.6562zM12.2928 20.8787l2.086-2.0859 2.8293 2.8294-2.0857 2.0862zM11.71 27.1211A2.9824 2.9824 0 019.5889 28H5.1714l5.7073-5.7072 2.83 2.83zm15.7037-15.707l-8.792 8.7939-2.8293-2.8292 8.7931-8.7929a2.0473 2.0473 0 012.8282 0 1.9995 1.9995 0 010 2.8282zM15 2a2.9948 2.9948 0 00-2.8157 2H7.8156A2.9925 2.9925 0 104 7.8154v4.3687a3 3 0 102 0V7.8159A2.9959 2.9959 0 007.8156 6h4.3686A2.9947 2.9947 0 1015 2zM5 16a1 1 0 111-1A1.0008 1.0008 0 015 16zM5 6A1 1 0 116 5 1.0008 1.0008 0 015 6zM15 6a1 1 0 111-1A1.0008 1.0008 0 0115 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vp||(vp=i.createElement("path",{d:"M21,29H5a2,2,0,0,1-2-2V5A2,2,0,0,1,5,3H21V5H5V27H21Z"})),cp||(cp=i.createElement("path",{d:"M15 9H17V23H15zM27 9H29V23H27zM21 9H23V23H21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),up||(up=i.createElement("path",{d:"M22 24H10a2 2 0 01-2-2V19h2v3H22V19h2v3A2 2 0 0122 24zM2 15H30V17H2zM24 13H22V10H10v3H8V10a2 2 0 012-2H22a2 2 0 012 2zM30 10L28 10 28 4 22 4 22 2 30 2 30 10zM4 10L2 10 2 2 10 2 10 4 4 4 4 10zM10 30L2 30 2 22 4 22 4 28 10 28 10 30zM30 30L22 30 22 28 28 28 28 22 30 22 30 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),fp||(fp=i.createElement("path",{d:"M29.3826 2.0762a.9993.9993 0 00-1.09.2168l-26 26A1 1 0 003 30h8V28H5.4143l4-4H22a2.0021 2.0021 0 002-2V9.4146l4-4V11h2V3A1 1 0 0029.3826 2.0762zM22 22H11.4143L22 11.4146zM10 17.7554V10h7.7554l2-2H10a2.0025 2.0025 0 00-2 2v9.7554zM11 2L2 2 2 11 4 11 4 4 11 4 11 2zM21 30L30 30 30 21 28 21 28 28 21 28 21 30zM4 23.755L4 21 2 21 2 25.754 4 23.755zM25.755 2L21 2 21 4 23.755 4 25.755 2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bp||(bp=i.createElement("circle",{cx:"9.5",cy:"9.5",r:"2.5"})),pp||(pp=i.createElement("circle",{cx:"9.5",cy:"22.5",r:"2.5"})),gp||(gp=i.createElement("circle",{cx:"22.5",cy:"22.5",r:"2.5"})),Ep||(Ep=i.createElement("path",{d:"M28,2H4A2.0023,2.0023,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,13H17V4H28ZM15,4V15H4V4ZM4,17H15V28H4ZM17,28V17H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wp||(wp=i.createElement("path",{d:"M27,19.001A4.0056,4.0056,0,0,0,22.9991,15H9.0011A2.0031,2.0031,0,0,1,7,12.9991V9.858A3.9949,3.9949,0,0,0,9.8581,7h12.284a4,4,0,1,0,0-2H9.8581A3.9916,3.9916,0,1,0,5,9.858v3.1411A4.0057,4.0057,0,0,0,9.0011,17h13.998A2.003,2.003,0,0,1,25,19.001V22H22v3H9.8581a4,4,0,1,0,0,2H22v3h8V22H27ZM26,4a2,2,0,1,1-2,2A2.0019,2.0019,0,0,1,26,4ZM4,6A2,2,0,1,1,6,8,2.0019,2.0019,0,0,1,4,6ZM6,28a2,2,0,1,1,2-2A2.002,2.002,0,0,1,6,28Zm22-4v4H24V24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hp||(hp=i.createElement("path",{d:"M27,19c-0.3,0-0.7,0.1-1,0.2L20.4,12c1-1.1,1.6-2.5,1.6-4c0-3.3-2.7-6-6-6s-6,2.7-6,6c0,1.6,0.6,3,1.6,4L6,19.2 C5.7,19.1,5.3,19,5,19c-1.7,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3c0-0.6-0.2-1.1-0.5-1.6l5.6-7.1c0.6,0.3,1.2,0.5,1.9,0.6v10.3 c-1.2,0.4-2,1.5-2,2.8c0,1.7,1.3,3,3,3s3-1.3,3-3c0-1.3-0.8-2.4-2-2.8V13.9c0.7-0.1,1.3-0.3,1.9-0.6l5.6,7.1c-0.3,0.5-0.5,1-0.5,1.6 c0,1.7,1.3,3,3,3s3-1.3,3-3S28.7,19,27,19z M16,4c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4S13.8,4,16,4z M5,23c-0.6,0-1-0.4-1-1 s0.4-1,1-1s1,0.4,1,1S5.6,23,5,23z M16,28c-0.6,0-1-0.4-1-1s0.4-1,1-1s1,0.4,1,1S16.6,28,16,28z M27,23c-0.6,0-1-0.4-1-1s0.4-1,1-1 s1,0.4,1,1S27.6,23,27,23z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xp||(xp=i.createElement("path",{d:"M23,23v3H8.5a4.5,4.5,0,0,1,0-9H9V15H8.5a6.5,6.5,0,0,0,0,13H23v3h8V23Zm6,6H25V25h4Z"})),zp||(zp=i.createElement("path",{d:"M21 22H19V19H13v3H11V19a2.0023 2.0023 0 012-2h6a2.0023 2.0023 0 012 2zM16 16a3 3 0 113-3A3.0033 3.0033 0 0116 16zm0-4a1 1 0 101 1A1.0013 1.0013 0 0016 12z"})),Lp||(Lp=i.createElement("path",{d:"M23.5,4H9V1H1V9H9V6H23.5a4.5,4.5,0,0,1,0,9H23v2h.5a6.5,6.5,0,0,0,0-13ZM7,7H3V3H7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mp||(Mp=i.createElement("path",{d:"M26 28a4 4 0 114-4A4.0045 4.0045 0 0126 28zm0-6a2 2 0 102 2A2.0023 2.0023 0 0026 22zM24 8H18v2h6a1 1 0 010 2H21a1 1 0 00-.98 1.1963l.9241 4.6211L18.4338 22h-2.69l-2.5723-8.5752A1.988 1.988 0 0011.2559 12H6v2h5.2561l.6 2H7a5.0057 5.0057 0 00-5 5v2a1 1 0 001 1H4a4 4 0 008 0h7a1 1 0 00.8574-.4854l3-5a1 1 0 00.1231-.7109L22.22 14H24a3 3 0 000-6zM8 26a2.0025 2.0025 0 01-2-2h4A2.0025 2.0025 0 018 26zM4 22V21a3.0033 3.0033 0 013-3h5.4561l1.2 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rp||(Rp=i.createElement("path",{d:"M15 19H17V28H15z"})),Sp||(Sp=i.createElement("path",{d:"M23,10V8H20a2.0025,2.0025,0,0,0-2-2H14a2.0025,2.0025,0,0,0-2,2H9v2h3v4.1841A2.9957,2.9957,0,0,0,10,17v7h2V17a1.0008,1.0008,0,0,1,1-1h6a1.0008,1.0008,0,0,1,1,1v7h2V17a2.9957,2.9957,0,0,0-2-2.8159V10ZM18,8v6H14V8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dp||(Dp=i.createElement("path",{d:"M28,4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V6A2,2,0,0,0,28,4ZM18,28H14V24h4Zm10-6H4V6H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yp||(yp=i.createElement("path",{d:"M28,22H11.41L30,3.41,28.59,2l-2,2H4A2,2,0,0,0,2,6V22H4V6H24.59L2,28.59,3.41,30l6-6H12v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V9H28ZM18,28H14V24h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$w);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vp||(Vp=i.createElement("path",{d:"M18.83 26L21.41 23.42 20 22 16 26 20 30 21.42 28.59 18.83 26zM27.17 26L24.59 28.58 26 30 30 26 26 22 24.58 23.41 27.17 26z"})),Ap||(Ap=i.createElement("path",{d:"M14,28H8V4h8v6a2.0058,2.0058,0,0,0,2,2h6v6h2V10a.9092.9092,0,0,0-.3-.7l-7-7A.9087.9087,0,0,0,18,2H8A2.0058,2.0058,0,0,0,6,4V28a2.0058,2.0058,0,0,0,2,2h6ZM18,4.4,23.6,10H18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,eh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Tp||(Tp=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM27.17 26L24.59 28.58 26 30 30 26 26 22 24.58 23.41 27.17 26zM18.83 26L21.41 23.42 20 22 16 26 20 30 21.42 28.59 18.83 26zM25.7 9.3l-7-7A.9087.9087 0 0018 2H8A2.0058 2.0058 0 006 4V16H8V4h8v6a2.0058 2.0058 0 002 2h6v6h2V10A.9092.9092 0 0025.7 9.3zM18 10V4.4L23.6 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ih);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wp||(Wp=i.createElement("path",{d:"M30 9L27.9 9 24 15.6 24 9 22 9 22 23 24 23 24 18.7 24.9 17.2 27.9 23 30 23 26.1 15.4 30 9zM16 23H12V9h4a4.0118 4.0118 0 014 4v6A4.0118 4.0118 0 0116 23zm-2-2h2a2.0059 2.0059 0 002-2V13a2.0059 2.0059 0 00-2-2H14zM8 23H2V21H8V17H4a2.0059 2.0059 0 01-2-2V11A2.0059 2.0059 0 014 9h6v2H4v4H8a2.0059 2.0059 0 012 2v4A2.0059 2.0059 0 018 23z"})),_)})).propTypes=da;var rx,lx=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,th);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Up||(Up=i.createElement("path",{d:"M15,14.3L10.7,10c1.9-2.3,1.6-5.8-0.7-7.7S4.2,0.7,2.3,3S0.7,8.8,3,10.7c2,1.7,5,1.7,7,0l4.3,4.3L15,14.3z M2,6.5 C2,4,4,2,6.5,2S11,4,11,6.5S9,11,6.5,11S2,9,2,6.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ip||(Ip=i.createElement("path",{d:"M29,27.5859l-7.5521-7.5521a11.0177,11.0177,0,1,0-1.4141,1.4141L27.5859,29ZM4,13a9,9,0,1,1,9,9A9.01,9.01,0,0,1,4,13Z"})),_)}));lx.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_h);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bp||(Bp=i.createElement("path",{d:"M30 6L26 6 26 2 24 2 24 6 20 6 20 8 24 8 24 12 26 12 26 8 30 8 30 6zM24 28.5859l-5.9751-5.9751a9.0234 9.0234 0 10-1.4141 1.4141L22.5859 30zM4 17a7 7 0 117 7A7.0078 7.0078 0 014 17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Op||(Op=i.createElement("path",{d:"M30 28.5859l-4.6885-4.6884a8.028 8.028 0 10-1.414 1.414L28.5859 30zM19 25a6 6 0 116-6A6.0066 6.0066 0 0119 25zM2 12H10V14H2zM2 2H18V4H2zM2 7H18V9H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ah);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fp||(Fp=i.createElement("path",{d:"M14 16.59L11.41 14 10 15.41 14 19.41 22 11.41 20.59 10 14 16.59z"})),qp||(qp=i.createElement("path",{d:"M16,30,9.8242,26.7071A10.9818,10.9818,0,0,1,4,17V4A2.0021,2.0021,0,0,1,6,2H26a2.0021,2.0021,0,0,1,2,2V17a10.9818,10.9818,0,0,1-5.8242,9.7071ZM6,4V17a8.9852,8.9852,0,0,0,4.7656,7.9423L16,27.7333l5.2344-2.791A8.9852,8.9852,0,0,0,26,17V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xp||(Xp=i.createElement("path",{d:"M30,24V22H27.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,24,18.1011V16H22v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,18.1011,22H16v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,22,27.8989V30h2V27.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,27.8989,24Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,23,26Z"})),Cp||(Cp=i.createElement("path",{d:"M14,26.667l-3.2344-1.7246A8.9858,8.9858,0,0,1,6,17V4H26V14h2V4a2.0023,2.0023,0,0,0-2-2H6A2.0023,2.0023,0,0,0,4,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L14,28.9336Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hp||(Hp=i.createElement("path",{d:"M12 6L8 6 8 2 6 2 6 6 2 6 2 8 6 8 6 12 8 12 8 8 12 8 12 6zM16 6H20V8H16zM24 6V8h4v4h2V8a2 2 0 00-2-2zM6 16H8V20H6zM8 28V24H6v4a2 2 0 002 2h4V28zM28 16H30V20H28zM16 28H20V30H16zM28 24v4H24v2h4a2 2 0 002-2V24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kp||(kp=i.createElement("path",{d:"M12 6L8 6 8 2 6 2 6 6 2 6 2 8 6 8 6 12 8 12 8 8 12 8 12 6zM30 10V4H24V6H16V8h8v2h2V24H24v2H10V24H8V16H6v8H4v6h6V28H24v2h6V24H28V10zM8 28H6V26H8zm20 0H26V26h2zM26 6h2V8H26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Np||(Np=i.createElement("path",{d:"M8 26H4a2.0021 2.0021 0 01-2-2V20H4v4H8zM2 12H4V16H2zM26 8H24V4H20V2h4a2.0021 2.0021 0 012 2zM12 2H16V4H12zM4 8H2V4A2.0021 2.0021 0 014 2H8V4H4zM27 32a.9967.9967 0 01-.707-.293l-6.1377-6.1377L16.832 30.5547a1 1 0 01-1.79-.2676l-6-20A1 1 0 0110.2871 9.042l20 6a1 1 0 01.2676 1.79l-4.9854 3.3233L31.707 26.293a.9994.9994 0 010 1.414l-4 4A.9967.9967 0 0127 32zm0-2.4141L29.5859 27 22.431 19.845l5.2458-3.4978L11.4917 11.4917l4.8555 16.1851L19.845 22.431z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,oh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zp||(Zp=i.createElement("path",{d:"M27.45,15.11l-22-11a1,1,0,0,0-1.08.12,1,1,0,0,0-.33,1L7,16,4,26.74A1,1,0,0,0,5,28a1,1,0,0,0,.45-.11l22-11a1,1,0,0,0,0-1.78Zm-20.9,10L8.76,17H18V15H8.76L6.55,6.89,24.76,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yp||(Yp=i.createElement("path",{d:"M27.71,4.29a1,1,0,0,0-1.05-.23l-22,8a1,1,0,0,0,0,1.87l9.6,3.84,3.84,9.6A1,1,0,0,0,19,28h0a1,1,0,0,0,.92-.66l8-22A1,1,0,0,0,27.71,4.29ZM19,24.2l-2.79-7L21,12.41,19.59,11l-4.83,4.83L7.8,13,25.33,6.67Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pp||(Pp=i.createElement("path",{d:"M27.71,4.29a1,1,0,0,0-1.05-.23l-22,8a1,1,0,0,0,0,1.87l8.59,3.43L19.59,11,21,12.41l-6.37,6.37,3.44,8.59A1,1,0,0,0,19,28h0a1,1,0,0,0,.92-.66l8-22A1,1,0,0,0,27.71,4.29Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ch);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jp||(jp=i.createElement("path",{d:"M27.45,15.11l-22-11a1,1,0,0,0-1.08.12,1,1,0,0,0-.33,1L6.69,15H18v2H6.69L4,26.74A1,1,0,0,0,5,28a1,1,0,0,0,.45-.11l22-11a1,1,0,0,0,0-1.78Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kp||(Kp=i.createElement("path",{d:"M4 7H2V4A2.0023 2.0023 0 014 2H7V4H4zM7 22H4a2.0023 2.0023 0 01-2-2V17H4v3H7zM2 10H4V14H2zM22 7H20V4H17V2h3a2.0023 2.0023 0 012 2zM10 2H14V4H10zM28 30H12a2.0023 2.0023 0 01-2-2V12a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM12 12V28H28V12z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gp||(Gp=i.createElement("path",{d:"M28,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6v6a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V12A2.0023,2.0023,0,0,0,28,10ZM12,28V12H28l.0015,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qp||(Qp=i.createElement("path",{d:"M16 2a8 8 0 108 8A8.0092 8.0092 0 0016 2zm5.91 7H19.4724a15.2457 15.2457 0 00-.7917-4.36A6.0088 6.0088 0 0121.91 9zM16.022 15.999h-.0076c-.3813-.1206-1.3091-1.8213-1.479-4.999h2.9292C17.2952 14.1763 16.3711 15.877 16.022 15.999zM14.5354 9c.1694-3.1763 1.0935-4.877 1.4426-4.999h.0076c.3813.1206 1.3091 1.8213 1.479 4.999zM13.3193 4.64A15.2457 15.2457 0 0012.5276 9H10.09A6.0088 6.0088 0 0113.3193 4.64zM10.09 11h2.4373a15.2457 15.2457 0 00.7917 4.36A6.0088 6.0088 0 0110.09 11zm8.59 4.36A15.2457 15.2457 0 0019.4724 11H21.91A6.0088 6.0088 0 0118.6807 15.36zM28 30H4a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 30zM4 22v6H28V22z"})),Jp||(Jp=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ph);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$p||($p=i.createElement("path",{d:"M6,30H26a2,2,0,0,0,2-2V22a2,2,0,0,0-2-2H6a2,2,0,0,0-2,2v6A2,2,0,0,0,6,30Zm0-8H26v6H6Z"})),eg||(eg=i.createElement("circle",{cx:"9",cy:"25",r:"1"})),ig||(ig=i.createElement("path",{d:"M26,2,24.59,3.41,27.17,6H22.315A6.9835,6.9835,0,0,0,9.08,10H4.83L7.41,7.41,6,6,1,11l5,5,1.41-1.41L4.83,12H9.685A6.9835,6.9835,0,0,0,22.92,8h4.25l-2.58,2.59L26,12l5-5ZM21,9a4.983,4.983,0,0,1-8.9745,3H16V10H11.1011a4.9852,4.9852,0,0,1,8.8734-4H16V8h4.8989A5.0019,5.0019,0,0,1,21,9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tg||(tg=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V22a2.0021,2.0021,0,0,1,2-2H28a2.0021,2.0021,0,0,1,2,2v6A2.0021,2.0021,0,0,1,28,30ZM4,22v6H28V22Z"})),_g||(_g=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),sg||(sg=i.createElement("path",{d:"M19 11.586L17 9.586 17 6 15 6 15 10.414 17.586 13 19 11.586z"})),ag||(ag=i.createElement("path",{d:"M16,18a8,8,0,1,1,8-8A8.0092,8.0092,0,0,1,16,18ZM16,4a6,6,0,1,0,6,6A6.0067,6.0067,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Eh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ng||(ng=i.createElement("path",{d:"M28,24V22A12.01,12.01,0,0,0,17,10.0507V8h3V6H12V8h3v2.0507A12.01,12.01,0,0,0,4,22v2H2v2H30V24ZM16,12a10.0167,10.0167,0,0,1,9.7984,8H6.2015A10.0165,10.0165,0,0,1,16,12ZM6,22H26v2H6Z",transform:"translate(0 .005)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rg||(rg=i.createElement("path",{d:"M26,8,24.59,9.41,27.17,12H16a5.967,5.967,0,0,0-4,1.54V6.83l2.59,2.58L16,8,11,3,6,8,7.41,9.41,10,6.83V18a5.969,5.969,0,0,0,1.54,4H4.83l2.58-2.59L6,18,1,23l5,5,1.41-1.41L4.83,24H16A5.99,5.99,0,0,0,20.46,14h6.71l-2.58,2.59L26,18l5-5ZM20,18a4,4,0,1,1-4-4A4.0045,4.0045,0,0,1,20,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hh);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),lg||(lg=i.createElement("path",{d:"M13.5,8.4c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3,0-0.4l1-0.8c0.4-0.3,0.4-0.9,0.2-1.3l-1.2-2C13.3,3.2,13,3,12.6,3 c-0.1,0-0.2,0-0.3,0.1l-1.2,0.4c-0.2-0.1-0.4-0.3-0.7-0.4l-0.3-1.3C10.1,1.3,9.7,1,9.2,1H6.8c-0.5,0-0.9,0.3-1,0.8L5.6,3.1 C5.3,3.2,5.1,3.3,4.9,3.4L3.7,3C3.6,3,3.5,3,3.4,3C3,3,2.7,3.2,2.5,3.5l-1.2,2C1.1,5.9,1.2,6.4,1.6,6.8l0.9,0.9c0,0.1,0,0.3,0,0.4 c0,0.1,0,0.3,0,0.4L1.6,9.2c-0.4,0.3-0.5,0.9-0.2,1.3l1.2,2C2.7,12.8,3,13,3.4,13c0.1,0,0.2,0,0.3-0.1l1.2-0.4 c0.2,0.1,0.4,0.3,0.7,0.4l0.3,1.3c0.1,0.5,0.5,0.8,1,0.8h2.4c0.5,0,0.9-0.3,1-0.8l0.3-1.3c0.2-0.1,0.4-0.2,0.7-0.4l1.2,0.4 c0.1,0,0.2,0.1,0.3,0.1c0.4,0,0.7-0.2,0.9-0.5l1.1-2c0.2-0.4,0.2-0.9-0.2-1.3L13.5,8.4z M12.6,12l-1.7-0.6c-0.4,0.3-0.9,0.6-1.4,0.8 L9.2,14H6.8l-0.4-1.8c-0.5-0.2-0.9-0.5-1.4-0.8L3.4,12l-1.2-2l1.4-1.2c-0.1-0.5-0.1-1.1,0-1.6L2.2,6l1.2-2l1.7,0.6 C5.5,4.2,6,4,6.5,3.8L6.8,2h2.4l0.4,1.8c0.5,0.2,0.9,0.5,1.4,0.8L12.6,4l1.2,2l-1.4,1.2c0.1,0.5,0.1,1.1,0,1.6l1.4,1.2L12.6,12z"})),dg||(dg=i.createElement("path",{d:"M8,11c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3C11,9.6,9.7,11,8,11C8,11,8,11,8,11z M8,6C6.9,6,6,6.8,6,7.9C6,7.9,6,8,6,8 c0,1.1,0.8,2,1.9,2c0,0,0.1,0,0.1,0c1.1,0,2-0.8,2-1.9c0,0,0-0.1,0-0.1C10,6.9,9.2,6,8,6C8.1,6,8,6,8,6z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),og||(og=i.createElement("path",{d:"M27,16.76c0-.25,0-.5,0-.76s0-.51,0-.77l1.92-1.68A2,2,0,0,0,29.3,11L26.94,7a2,2,0,0,0-1.73-1,2,2,0,0,0-.64.1l-2.43.82a11.35,11.35,0,0,0-1.31-.75l-.51-2.52a2,2,0,0,0-2-1.61H13.64a2,2,0,0,0-2,1.61l-.51,2.52a11.48,11.48,0,0,0-1.32.75L7.43,6.06A2,2,0,0,0,6.79,6,2,2,0,0,0,5.06,7L2.7,11a2,2,0,0,0,.41,2.51L5,15.24c0,.25,0,.5,0,.76s0,.51,0,.77L3.11,18.45A2,2,0,0,0,2.7,21L5.06,25a2,2,0,0,0,1.73,1,2,2,0,0,0,.64-.1l2.43-.82a11.35,11.35,0,0,0,1.31.75l.51,2.52a2,2,0,0,0,2,1.61h4.72a2,2,0,0,0,2-1.61l.51-2.52a11.48,11.48,0,0,0,1.32-.75l2.42.82a2,2,0,0,0,.64.1,2,2,0,0,0,1.73-1L29.3,21a2,2,0,0,0-.41-2.51ZM25.21,24l-3.43-1.16a8.86,8.86,0,0,1-2.71,1.57L18.36,28H13.64l-.71-3.55a9.36,9.36,0,0,1-2.7-1.57L6.79,24,4.43,20l2.72-2.4a8.9,8.9,0,0,1,0-3.13L4.43,12,6.79,8l3.43,1.16a8.86,8.86,0,0,1,2.71-1.57L13.64,4h4.72l.71,3.55a9.36,9.36,0,0,1,2.7,1.57L25.21,8,27.57,12l-2.72,2.4a8.9,8.9,0,0,1,0,3.13L27.57,20Z"})),mg||(mg=i.createElement("path",{d:"M16,22a6,6,0,1,1,6-6A5.94,5.94,0,0,1,16,22Zm0-10a3.91,3.91,0,0,0-4,4,3.91,3.91,0,0,0,4,4,3.91,3.91,0,0,0,4-4A3.91,3.91,0,0,0,16,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vg||(vg=i.createElement("path",{d:"M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30V8zM21 12c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3S22.7 12 21 12zM2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2V24zM11 20c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3S9.3 20 11 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cg||(cg=i.createElement("path",{d:"M16,22a6,6,0,1,1,6-6A5.9364,5.9364,0,0,1,16,22Zm0-10a3.9123,3.9123,0,0,0-4,4,3.9123,3.9123,0,0,0,4,4,3.9123,3.9123,0,0,0,4-4A3.9123,3.9123,0,0,0,16,12Z"})),ug||(ug=i.createElement("path",{d:"M29.3047,11.044,26.9441,6.9562a1.9977,1.9977,0,0,0-2.3728-.8946l-2.4341.8233a11.0419,11.0419,0,0,0-1.312-.7583L20.3215,3.608A2,2,0,0,0,18.36,2H13.64A2,2,0,0,0,11.6785,3.608l-.5037,2.5186A10.9666,10.9666,0,0,0,9.8481,6.88L7.4287,6.0616a1.9977,1.9977,0,0,0-2.3728.8946L2.6953,11.044a2.0006,2.0006,0,0,0,.4119,2.5025l1.9309,1.6968C5.021,15.4947,5,15.7447,5,16c0,.2578.01.5127.0278.7656l-1.9206,1.688a2.0006,2.0006,0,0,0-.4119,2.5025L5.0559,25.044a1.9977,1.9977,0,0,0,2.3728.8946l2.4341-.8233a10.9736,10.9736,0,0,0,1.312.7583l.5037,2.5186A2,2,0,0,0,13.64,30H18V28H13.64l-.71-3.5508a9.0953,9.0953,0,0,1-2.6948-1.5713L6.7878,24.044l-2.36-4.0878,2.7253-2.3951a8.9263,8.9263,0,0,1-.007-3.1279L4.4275,12.044,6.7886,7.9562l3.4267,1.1591a9.0305,9.0305,0,0,1,2.7141-1.5644L13.64,4H18.36l.71,3.5508a9.0978,9.0978,0,0,1,2.6948,1.5713l3.4468-1.166,2.36,4.0878-2.7978,2.4522L26.0923,16l2.8-2.4536A2.0006,2.0006,0,0,0,29.3047,11.044Z"})),fg||(fg=i.createElement("path",{d:"M23 26.18L20.41 23.59 19 25 23 29 30 22 28.59 20.59 23 26.18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bg||(bg=i.createElement("path",{d:"M29,25H27V23h1V19H24v1H22V18a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v6A1,1,0,0,1,29,25Z"})),pg||(pg=i.createElement("path",{d:"M24 30H18a1 1 0 01-1-1V23a1 1 0 011-1h6a1 1 0 011 1v6A1 1 0 0124 30zm-5-2h4V24H19zM15 19.8579A3.9934 3.9934 0 1120 16h2a6 6 0 10-7 5.91z"})),gg||(gg=i.createElement("path",{d:"M28.89,13.55l-2.31,2.03-1.42-1.42,2.41-2.12L25.21,7.96,21.77,9.12a9.3684,9.3684,0,0,0-2.7-1.57L18.36,4H13.64l-.71,3.55a8.8609,8.8609,0,0,0-2.71,1.57L6.79,7.96,4.43,12.04l2.72,2.39a8.8948,8.8948,0,0,0,0,3.13l-2.72,2.4,2.36,4.08,3.44-1.16a9.3684,9.3684,0,0,0,2.7,1.57L13.64,28H15v2H13.64a2.0007,2.0007,0,0,1-1.96-1.61l-.51-2.52a11.412,11.412,0,0,1-1.31-.75l-2.43.82a2.038,2.038,0,0,1-.64.1,1.973,1.973,0,0,1-1.73-1L2.7,20.96a2,2,0,0,1,.41-2.51l1.92-1.68C5.01,16.51,5,16.26,5,16s.02-.51.04-.76L3.11,13.55a2,2,0,0,1-.41-2.51L5.06,6.96a1.973,1.973,0,0,1,1.73-1,2.038,2.038,0,0,1,.64.1l2.42.82a11.5416,11.5416,0,0,1,1.32-.75l.51-2.52A2.0007,2.0007,0,0,1,13.64,2h4.72a2.0007,2.0007,0,0,1,1.96,1.61l.51,2.52a11.412,11.412,0,0,1,1.31.75l2.43-.82a2.038,2.038,0,0,1,.64-.1,1.973,1.973,0,0,1,1.73,1l2.36,4.08A2,2,0,0,1,28.89,13.55Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Eg||(Eg=i.createElement("circle",{cx:"23",cy:"24",r:"2"})),wg||(wg=i.createElement("path",{d:"M30.7769 23.4785A8.64 8.64 0 0023 18a8.64 8.64 0 00-7.7769 5.4785L15 24l.2231.5215A8.64 8.64 0 0023 30a8.64 8.64 0 007.7769-5.4785L31 24zM23 28a4 4 0 114-4A4.0045 4.0045 0 0123 28zM12.3989 20.8A6 6 0 1122 16H20a4 4 0 10-6.4 3.2z"})),hg||(hg=i.createElement("path",{d:"M29.3047,11.0439,26.9441,6.9561a1.9977,1.9977,0,0,0-2.3728-.8946l-2.4341.8233a11.0419,11.0419,0,0,0-1.312-.7583l-.5037-2.5186A2,2,0,0,0,18.36,2H13.64a2,2,0,0,0-1.9611,1.6079l-.5037,2.5186A10.9666,10.9666,0,0,0,9.8481,6.88L7.4287,6.0615a1.9977,1.9977,0,0,0-2.3728.8946L2.6953,11.0439a2.0006,2.0006,0,0,0,.4119,2.5025l1.9309,1.6968C5.021,15.4946,5,15.7446,5,16c0,.2578.01.5127.0278.7656l-1.9206,1.688a2.0006,2.0006,0,0,0-.4119,2.5025l2.3606,4.0878a1.9977,1.9977,0,0,0,2.3728.8946l2.4341-.8233a10.9736,10.9736,0,0,0,1.312.7583l.5037,2.5186A2,2,0,0,0,13.64,30H15V28H13.64l-.71-3.5508a9.0953,9.0953,0,0,1-2.6948-1.5713l-3.4468,1.166-2.36-4.0878L7.1528,17.561a8.9263,8.9263,0,0,1-.007-3.1279L4.4275,12.0439,6.7886,7.9561l3.4267,1.1591a9.0305,9.0305,0,0,1,2.7141-1.5644L13.64,4H18.36l.71,3.5508a9.0978,9.0978,0,0,1,2.6948,1.5713l3.4468-1.166,2.36,4.0878-2.7978,2.4522L26.0923,16l2.8-2.4536A2.0006,2.0006,0,0,0,29.3047,11.0439Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xg||(xg=i.createElement("path",{d:"M28,10H22V4a2.0023,2.0023,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10ZM12,20V12h8v8ZM3.9988,4H20v6H12a2.0023,2.0023,0,0,0-2,2v8H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zg||(zg=i.createElement("path",{d:"M12,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6V12A2,2,0,0,1,12,10Z"})),Lg||(Lg=i.createElement("path",{d:"M28,10H22V20a2,2,0,0,1-2,2H10v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mg||(Mg=i.createElement("path",{d:"M28,10H22V4a2.0025,2.0025,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2.0025,2.0025,0,0,0,2,2H28a2.0025,2.0025,0,0,0,2-2V12A2.0025,2.0025,0,0,0,28,10ZM4,20V4H20v6H12a2.0025,2.0025,0,0,0-2,2v8Zm8,8V22h8a2.0025,2.0025,0,0,0,2-2V12h6V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rg||(Rg=i.createElement("path",{d:"M28,10H22V4a2.0025,2.0025,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2.0025,2.0025,0,0,0,2,2H28a2.0025,2.0025,0,0,0,2-2V12A2.0025,2.0025,0,0,0,28,10ZM4,20V4h6V20Zm18,8V12h6V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sg||(Sg=i.createElement("path",{d:"M28,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ah);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dg||(Dg=i.createElement("path",{d:"M23,20a5,5,0,0,0-3.89,1.89L11.8,17.32a4.46,4.46,0,0,0,0-2.64l7.31-4.57A5,5,0,1,0,18,7a4.79,4.79,0,0,0,.2,1.32l-7.31,4.57a5,5,0,1,0,0,6.22l7.31,4.57A4.79,4.79,0,0,0,18,25a5,5,0,1,0,5-5ZM23,4a3,3,0,1,1-3,3A3,3,0,0,1,23,4ZM7,19a3,3,0,1,1,3-3A3,3,0,0,1,7,19Zm16,9a3,3,0,1,1,3-3A3,3,0,0,1,23,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Th);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yg||(yg=i.createElement("path",{d:"M27 25H21a3 3 0 00-3 3v2h2V28a1 1 0 011-1h6a1 1 0 011 1v2h2V28A3 3 0 0027 25zM20 20a4 4 0 104-4A4 4 0 0020 20zm6 0a2 2 0 11-2-2A2 2 0 0126 20zM6 21V20H4v1a7 7 0 007 7h3V26H11A5 5 0 016 21zM19 10H26V12H19zM19 6H29V8H19zM19 2H29V4H19zM11 11H5a3 3 0 00-3 3v2H4V14a1 1 0 011-1h6a1 1 0 011 1v2h2V14A3 3 0 0011 11zM8 10A4 4 0 104 6 4 4 0 008 10zM8 4A2 2 0 116 6 2 2 0 018 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vg||(Vg=i.createElement("path",{d:"M28.76,11.35A1,1,0,0,0,28,11H22V7a3,3,0,0,0-3-3H13a3,3,0,0,0-3,3v4H4a1,1,0,0,0-1,1.15L4.88,24.3a2,2,0,0,0,2,1.7H25.14a2,2,0,0,0,2-1.7L29,12.15A1,1,0,0,0,28.76,11.35ZM12,7a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v4H12ZM25.14,24H6.86L5.17,13H26.83Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ag||(Ag=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Tg||(Tg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Wg||(Wg=i.createElement("path",{d:"M28,7H5.82L5,2.8A1,1,0,0,0,4,2H0V4H3.18L7,23.2A1,1,0,0,0,8,24H26V22H8.82L8,18H26a1,1,0,0,0,1-.78l2-9A1,1,0,0,0,28,7Zm-2.8,9H7.62L6.22,9H26.75Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ih);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ug||(Ug=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Ig||(Ig=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Bg||(Bg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Og||(Og=i.createElement("path",{d:"M21.586 6.586L18 10.172 18 2 16 2 16 10.172 12.414 6.586 11 8 17 14 23 8 21.586 6.586z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fg||(Fg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),qg||(qg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Xg||(Xg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Cg||(Cg=i.createElement("path",{d:"M21.586 9.414L18 5.828 18 14 16 14 16 5.828 12.414 9.414 11 8 17 2 23 8 21.586 9.414z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hg||(Hg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),kg||(kg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Ng||(Ng=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Zg||(Zg=i.createElement("path",{d:"M18.41 8L22 4.41 20.59 3 17 6.59 13.41 3 12 4.41 15.59 8 12 11.59 13.41 13 17 9.41 20.59 13 22 11.59 18.41 8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yg||(Yg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Pg||(Pg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),jg||(jg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Kg||(Kg=i.createElement("path",{d:"M17,2a6,6,0,1,0,6,6A6.0066,6.0066,0,0,0,17,2Zm0,2a3.9521,3.9521,0,0,1,2.019.5669L13.5669,10.019A3.9529,3.9529,0,0,1,13,8,4.0045,4.0045,0,0,1,17,4Zm0,8a3.9521,3.9521,0,0,1-2.019-.5669L20.4331,5.981A3.9529,3.9529,0,0,1,21,8,4.0045,4.0045,0,0,1,17,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gg||(Gg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Qg||(Qg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Jg||(Jg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),$g||($g=i.createElement("path",{d:"M12 6L12 8 22 8 22 6 12 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),eE||(eE=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),iE||(iE=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),tE||(tE=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),_E||(_E=i.createElement("path",{d:"M18 6L18 2 16 2 16 6 12 6 12 8 16 8 16 12 18 12 18 8 22 8 22 6 18 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ch);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sE||(sE=i.createElement("path",{d:"M17 24H21V28H17zM24 24H28V28H24zM17 17H21V21H17zM24 17H28V21H24z"})),aE||(aE=i.createElement("path",{d:"M28,11h-6V7c0-1.7-1.3-3-3-3h-6c-1.7,0-3,1.3-3,3v4H4c-0.6,0-1,0.4-1,1c0,0.1,0,0.1,0,0.2l1.9,12.1c0.1,1,1,1.7,2,1.7H15v-2 H6.9L5.2,13H28V11z M12,7c0-0.6,0.4-1,1-1h6c0.6,0,1,0.4,1,1v4h-8V7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nE||(nE=i.createElement("path",{d:"M28 10H4A2.0022 2.0022 0 012 8V4A2.0021 2.0021 0 014 2H28a2.0021 2.0021 0 012 2V8A2.0022 2.0022 0 0128 10zM4 4V8H28V4zM28 30H4a2.0022 2.0022 0 01-2-2V24a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v4A2.0022 2.0022 0 0128 30zM4 24v4H28V24zM28 20H4a2.0022 2.0022 0 01-2-2V14a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v4A2.0022 2.0022 0 0128 20zM4 14v4H28V14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rE||(rE=i.createElement("path",{d:"M28 28H17a2.0023 2.0023 0 01-2-2V20a2.0023 2.0023 0 012-2H28a2.0027 2.0027 0 012 2v6A2.0027 2.0027 0 0128 28zM17 20v6H28.002L28 20zM12 10L12 13.586 7.707 9.293 6.293 10.707 10.586 15 7 15 7 17 14 17 14 10 12 10z"})),lE||(lE=i.createElement("path",{d:"M13,22H4a2.0023,2.0023,0,0,1-2-2V7A2.002,2.002,0,0,1,4,5H26a2.0023,2.0023,0,0,1,2,2v9H26V7H4V20h9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dE||(dE=i.createElement("rect",{width:"15",height:"10",x:"15",y:"18",rx:"2"})),oE||(oE=i.createElement("path",{d:"M12 10L12 13.586 7.707 9.293 6.293 10.707 10.586 15 7 15 7 17 14 17 14 10 12 10z"})),mE||(mE=i.createElement("path",{d:"M13,22H4a2.0023,2.0023,0,0,1-2-2V7A2.002,2.002,0,0,1,4,5H26a2.0023,2.0023,0,0,1,2,2v9H26V7H4V20h9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vE||(vE=i.createElement("path",{d:"M22.59,19.41,26.17,23H19.55l-4.37-7,4.37-7h6.62l-3.58,3.59L24,14l6-6L24,2,22.59,3.41,26.17,7H19.55a2,2,0,0,0-1.69.94L14,14.11,10.14,7.94A2,2,0,0,0,8.45,7H2V9H8.45l4.37,7L8.45,23H2v2H8.45a2,2,0,0,0,1.69-.94L14,17.89l3.86,6.17a2,2,0,0,0,1.69.94h6.62l-3.58,3.59L24,30l6-6-6-6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cE||(cE=i.createElement("path",{d:"M29.81,16l-7-9.56A1,1,0,0,0,22,6H3A1,1,0,0,0,2,7V24a1,1,0,0,0,1,1H5.14a4,4,0,0,0,7.72,0h6.28a4,4,0,0,0,7.72,0H29a1,1,0,0,0,1-1V16.56A1,1,0,0,0,29.81,16ZM20,8h1.49l5.13,7H20ZM4,8H18v7H4ZM9,26a2,2,0,1,1,2-2A2,2,0,0,1,9,26Zm14,0a2,2,0,1,1,2-2A2,2,0,0,1,23,26Zm5-3H26.86a4,4,0,0,0-7.72,0H12.86a4,4,0,0,0-7.72,0H4V17H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ph);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uE||(uE=i.createElement("path",{d:"M10 12H12V14H10zM6 12H8V14H6zM2 12H4V14H2zM26 30H24V27H20a5.0055 5.0055 0 01-5-5V20.7207l-2.3162-.772a1 1 0 01-.5412-1.4631L15 13.7229V11a9.01 9.01 0 019-9h5V4H24a7.0078 7.0078 0 00-7 7v3a.9991.9991 0 01-.1426.5144l-2.3586 3.9312 1.8174.6057A1 1 0 0117 20v2a3.0033 3.0033 0 003 3h5a1 1 0 011 1z"})),fE||(fE=i.createElement("path",{d:"M19 12H23V14H19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bE||(bE=i.createElement("path",{d:"M24 5L7 5 7 7.414 15.586 16 7 24.586 7 27 24 27 24 25 9.414 25 18.414 16 9.414 7 24 7 24 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pE||(pE=i.createElement("path",{d:"M26 6H28V26H26zM18 11H20V26H18zM11 16H13V26H11zM4 20H6V26H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gE||(gE=i.createElement("path",{d:"M21,9H8a2.0023,2.0023,0,0,0-2,2V21a2.0023,2.0023,0,0,0,2,2H21a2.0023,2.0023,0,0,0,2-2V11A2.0023,2.0023,0,0,0,21,9Zm0,4H18V11h3Zm-3,2h3v2H18Zm-2-4V21H13V14a1,1,0,0,0-1-1H8V11Zm-5,6H8V15h3ZM8,19h3v2H8Zm10,2V19h3v2Z"})),EE||(EE=i.createElement("path",{d:"M23.5317,27H4a2.0021,2.0021,0,0,1-2-2V7A2.0021,2.0021,0,0,1,4,5H28a2.0021,2.0021,0,0,1,2,2V19.6379a2.0044,2.0044,0,0,1-.4639,1.2808L25.0679,26.28A1.9944,1.9944,0,0,1,23.5317,27ZM4,7V25H23.5317L28,19.6379V7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wE||(wE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zm-6-2h4V14H14zM10 30H2V18h8zM4 28H8V20H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hE||(hE=i.createElement("path",{d:"M30 30H22V4h8zM20 30H12V12h8zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$h);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xE||(xE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zm-6-2h4V14H14zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ex);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zE||(zE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ix);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),LE||(LE=i.createElement("path",{d:"M27 28a1 1 0 01-.5-.13l-19-11a1 1 0 010-1.74l19-11a1 1 0 011 0A1 1 0 0128 5V27a1 1 0 01-1 1zM10 16l16 9.27V6.73zM2 4H4V28H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ME||(ME=i.createElement("path",{d:"M27 28a.9975.9975 0 01-.501-.1348l-19-11a1 1 0 010-1.73l19-11A1 1 0 0128 5V27a1 1 0 01-1 1zM2 4H4V28H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_x);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),RE||(RE=i.createElement("path",{d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7485l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Zm-6.9409-6L22,19.3006V12.7Z"})),SE||(SE=i.createElement("path",{d:"M9 10H11V22H9z",transform:"rotate(-180 10 16)"})),DE||(DE=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yE||(yE=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM10,22H8V10h2Zm14-1a1,1,0,0,1-1.4858.874l-9-5a1,1,0,0,1,0-1.748l9-5A1,1,0,0,1,24,11Z"})),VE||(VE=i.createElement("path",{d:"M22 19.301L22 12.699 16.059 16 22 19.301z"})),AE||(AE=i.createElement("path",{fill:"none",d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7486l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Zm-6.9409-6L22,19.3005V12.7Z"})),TE||(TE=i.createElement("path",{fill:"none",d:"M8 10H10V22H8z",transform:"rotate(-180 9 16)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ax);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),WE||(WE=i.createElement("path",{d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7485l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Z"})),UE||(UE=i.createElement("path",{d:"M9 10H11V22H9z",transform:"rotate(-180 10 16)"})),IE||(IE=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),BE||(BE=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM10,22H8V10h2Zm14-1a1,1,0,0,1-1.4858.874l-9-5a1,1,0,0,1,0-1.748l9-5A1,1,0,0,1,24,11Z"})),OE||(OE=i.createElement("path",{fill:"none",d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7486l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Z"})),FE||(FE=i.createElement("path",{fill:"none",d:"M8 10H10V22H8z",transform:"rotate(-180 9 16)"})),_)})).propTypes=da;var dx=["autoComplete","className","closeButtonLabelText","defaultValue","disabled","id","labelText","light","onChange","onClear","onKeyDown","onExpand","placeholder","renderIcon","role","size","type","value"],ox=i.forwardRef((function(e,t){var _,s,a,n=e.autoComplete,r=void 0===n?"off":n,l=e.className,d=e.closeButtonLabelText,o=void 0===d?"Clear search input":d,m=e.defaultValue,v=e.disabled,c=e.id,u=e.labelText,f=e.light,b=e.onChange,p=void 0===b?function(){}:b,g=e.onClear,E=void 0===g?function(){}:g,w=e.onKeyDown,h=e.onExpand,x=e.placeholder,z=void 0===x?"":x,L=e.renderIcon,M=e.role,R=void 0===M?"searchbox":M,S=e.size,D=void 0===S?"md":S,y=e.type,V=void 0===y?"text":y,W=e.value,U=B(e,dx),I=Z(),O=(0,i.useRef)(null),F=(a=[t,O],(0,i.useCallback)((function(e){a.forEach((function(i){"function"===typeof i?i(e):null!==i&&void 0!==i&&(i.current=e)}))}),a)),X=Ir("search-input"),C=c||X,H="".concat(C,"-search"),N=q((0,i.useState)(W||m||!1),2),Y=N[0],P=N[1],j=q((0,i.useState)(W),2),K=j[0],G=j[1],Q=k()((A(_={},"".concat(I,"--search"),!0),A(_,"".concat(I,"--search--sm"),"sm"===D),A(_,"".concat(I,"--search--md"),"md"===D),A(_,"".concat(I,"--search--lg"),"lg"===D),A(_,"".concat(I,"--search--light"),f),A(_,"".concat(I,"--search--disabled"),v),A(_,l,l),_)),J=k()((A(s={},"".concat(I,"--search-close"),!0),A(s,"".concat(I,"--search-close--hidden"),!Y),s));function $(e){if(W){var i=Object.assign({},e.target,{target:{value:""}});p(i)}else O.current.value="",p(e);E(),P(!1),function(e){var i=e.current||e;i&&i.focus&&document.activeElement!==i&&i.focus()}(O)}return W!==K&&(P(!!W),G(W)),i.createElement("div",{role:"search","aria-labelledby":H,className:Q},i.createElement("div",{role:h?"button":null,className:"".concat(I,"--search-magnifier"),onClick:function(){h&&h()}},i.createElement(mx,{icon:L})),i.createElement("label",{id:H,htmlFor:C,className:"".concat(I,"--label")},u),i.createElement("input",T({},U,{autoComplete:r,className:"".concat(I,"--search-input"),defaultValue:m,disabled:v,role:R,ref:F,id:C,onChange:Ll([p,function(e){P(""!==e.target.value)}]),onKeyDown:Ll([w,function(e){Cr(e,Hr)&&(e.stopPropagation(),$(e))}]),placeholder:z,type:V,value:W})),i.createElement("button",{"aria-label":o,className:J,disabled:v,onClick:$,type:"button"},rx||(rx=i.createElement(Vr,null))))}));function mx(e){var t=e.icon,_=Z();return t?i.cloneElement(t,{className:"".concat(_,"--search-magnifier-icon")}):i.createElement(lx,{className:"".concat(_,"--search-magnifier-icon")})}ox.propTypes={autoComplete:P().string,className:P().string,closeButtonLabelText:P().string,defaultValue:P().oneOfType([P().string,P().number]),disabled:P().bool,id:P().string,labelText:P().node.isRequired,light:Or(P().bool),onChange:P().func,onClear:P().func,onExpand:P().func,onKeyDown:P().func,placeholder:P().string,renderIcon:P().oneOfType([P().func,P().object]),role:P().string,size:P().oneOf(["sm","md","lg"]),type:P().string,value:P().oneOfType([P().string,P().number])},mx.propTypes={icon:P().oneOfType([P().func,P().object])};var vx,cx=ox,ux=(0,i.createContext)(w);P().node,P().objectOf(P().bool);var fx=["className","type","id","placeHolderText","placeholder","labelText","closeButtonLabelText","small","size","light","disabled","onChange","onKeyDown","renderIcon","onClear"],bx=function(e){W(_,e);var t=F(_);function _(){var e;D(this,_);for(var i=arguments.length,s=new Array(i),a=0;a3?s-3:0),n=3;n add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"addi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"addiw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"I","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let result : xlenbits = add_bits(sign_extend(64, imm), rX_bits(rs1)) in { wX_bits(rd, sign_extend(64, subrange_bits(result, 31, 0))); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"addw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes32dsi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10101","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(32) = bitvector_concat(0x000000, aes_sbox_inv(si)) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(so, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"aes32dsmi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(8) = aes_sbox_inv(si) in { let mixed : bits(32) = aes_mixcolumn_byte_inv(so) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(mixed, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"aes32esi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(32) = bitvector_concat(0x000000, aes_sbox_fwd(si)) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(so, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"aes32esmi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(8) = aes_sbox_fwd(si) in { let mixed : bits(32) = aes_mixcolumn_byte_fwd(so) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(mixed, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"aes64ds","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11101","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:408.27-408.28\\"); let sr : bits(64) = aes_rv64_shiftrows_inv(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { wX_bits(rd, aes_apply_inv_sbox_to_each_byte(wd)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64dsm","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:399.27-399.28\\"); let sr : bits(64) = aes_rv64_shiftrows_inv(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { let sb : bits(64) = aes_apply_inv_sbox_to_each_byte(wd) in { wX_bits(rd, bitvector_concat(aes_mixcolumn_inv(subrange_bits(sb, 63, 32)), aes_mixcolumn_inv(subrange_bits(sb, 31, 0)))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64es","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:391.27-391.28\\"); let sr : bits(64) = aes_rv64_shiftrows_fwd(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { wX_bits(rd, aes_apply_fwd_sbox_to_each_byte(wd)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64esm","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:382.27-382.28\\"); let sr : bits(64) = aes_rv64_shiftrows_fwd(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { let sb : bits(64) = aes_apply_fwd_sbox_to_each_byte(wd) in { wX_bits(rd, bitvector_concat(aes_mixcolumn_fwd(subrange_bits(sb, 63, 32)), aes_mixcolumn_fwd(subrange_bits(sb, 31, 0)))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64im","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11000","size":5},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:374.27-374.28\\"); let w0 : bits(32) = aes_mixcolumn_inv(subrange_bits(rX_bits(rs1), 31, 0)) in { let w1 : bits(32) = aes_mixcolumn_inv(subrange_bits(rX_bits(rs1), 63, 32)) in { wX_bits(rd, bitvector_concat(w1, w0)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64ks1i","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rnum","type":"bits(4)"}],"syntax":"rd,rs1,rnum","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11000","size":5},{"field":"0b1","size":1},{"field":"rnum","size":4},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zkne","Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:356.27-356.28\\"); let prev : bits(32) = subrange_bits(rX_bits(rs1), 63, 32) in { let subwords : bits(32) = aes_subword_fwd(prev) in { let result : bits(32) = if eq_bits(rnum, 0xA) then subwords else xor_vec(rotater(subwords, 8), aes_decode_rcon(rnum)) in { wX_bits(rd, bitvector_concat(result, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64ks2","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b11111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne","Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:366.27-366.28\\"); let w0 : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 63, 32), subrange_bits(rX_bits(rs2), 31, 0)) in { let w1 : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 63, 32), xor_vec(subrange_bits(rX_bits(rs2), 31, 0), subrange_bits(rX_bits(rs2), 63, 32))) in { wX_bits(rd, bitvector_concat(w1, w0)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"amoadd.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"and","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"andi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"andn","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"auipc","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(20)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm","size":20},{"field":"rd","size":5},{"field":"encdec_uop(op)","size":7}],"extensions":[],"function":"{ let off : xlenbits = sign_extend(64, bitvector_concat(imm, 0x000)) in { let ret : xlenbits = match op { RISCV_LUI => off, RISCV_AUIPC => add_bits(get_arch_pc(), off) } in { wX_bits(rd, ret); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"bclr","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bclri","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"beq","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bext","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bexti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"bge","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bgeu","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"binv","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"binvi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"blt","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bltu","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bne","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"brev8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011010000111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = reverse_bits_in_byte(subrange_bits(rs1_val, add_atom(i, 7), i)); wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"bset","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bseti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"c.add","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"rsd","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RTYPE((rs2, rsd, rsd, RISCV_ADD)))","description":"TBD"},{"mnemonic":"c.add.hint.","name":"TBD","operands":[{"name":"rs2","type":"regidx"}],"syntax":"rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.addi","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"nzi","type":"bits(6)"}],"syntax":"rsd,nzi","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzi5","size":1},{"field":"rsd","size":5},{"field":"nzi40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, nzi) in { execute(ITYPE((imm, rsd, rsd, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.addi.hint.","name":"TBD","operands":[{"name":"rsd","type":"regidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"rsd","size":5},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.addi16sp","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"nzi9","size":1},{"field":"0b00010","size":5},{"field":"nzi4","size":1},{"field":"nzi6","size":1},{"field":"nzi87","size":2},{"field":"nzi5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, bitvector_concat(imm, 0x0)) in { execute(ITYPE((imm, sp, sp, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.addi4spn","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"nzimm","type":"bits(8)"}],"syntax":"rdc,nzimm,0b00","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nz54","size":2},{"field":"nz96","size":4},{"field":"nz2","size":1},{"field":"nz3","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = bitvector_concat(0b00, bitvector_concat(nzimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { execute(ITYPE((imm, sp, rd, RISCV_ADDI))) } } }","description":"TBD"},{"mnemonic":"c.addiw","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rsd,imm","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"imm5","size":1},{"field":"rsd","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"execute(ADDIW((sign_extend(12, imm), rsd, rsd)))","description":"TBD"},{"mnemonic":"c.addw","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b01","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPEW((rs2, rsd, rsd, RISCV_ADDW))) } } }","description":"TBD"},{"mnemonic":"c.and","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b11","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_AND))) } } }","description":"TBD"},{"mnemonic":"c.andi","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rsd,imm","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"i5","size":1},{"field":"0b10","size":2},{"field":"rsd","size":3},{"field":"i40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(ITYPE((sign_extend(12, imm), rsd, rsd, RISCV_ANDI))) } }","description":"TBD"},{"mnemonic":"c.beqz","name":"TBD","operands":[{"name":"rs","type":"cregidx"},{"name":"imm","type":"bits(8)"}],"syntax":"rs,imm","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"i8","size":1},{"field":"i43","size":2},{"field":"rs","size":3},{"field":"i76","size":2},{"field":"i21","size":2},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(BTYPE((sign_extend(13, bitvector_concat(imm, 0b0)), zreg, creg2reg_idx(rs), RISCV_BEQ)))","description":"TBD"},{"mnemonic":"c.bnez","name":"TBD","operands":[{"name":"rs","type":"cregidx"},{"name":"imm","type":"bits(8)"}],"syntax":"rs,imm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"i8","size":1},{"field":"i43","size":2},{"field":"rs","size":3},{"field":"i76","size":2},{"field":"i21","size":2},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(BTYPE((sign_extend(13, bitvector_concat(imm, 0b0)), zreg, creg2reg_idx(rs), RISCV_BNE)))","description":"TBD"},{"mnemonic":"c.ebreak","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(EBREAK())","description":"TBD"},{"mnemonic":"c.fld","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b000","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD_FP((imm, rs, rd, DOUBLE))) } } } }","description":"TBD"},{"mnemonic":"c.fldsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui43","size":2},{"field":"ui86","size":3},{"field":"0b10","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(LOAD_FP((imm, sp, rd, DOUBLE))) } }","description":"TBD"},{"mnemonic":"c.flw","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b00","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD_FP((imm, rs, rd, WORD))) } } } }","description":"TBD"},{"mnemonic":"c.flwsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui42","size":3},{"field":"ui76","size":2},{"field":"0b10","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(imm, 0b00)) in { execute(LOAD_FP((imm, sp, rd, WORD))) } }","description":"TBD"},{"mnemonic":"c.fsd","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b000","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE_FP((imm, rs2, rs1, DOUBLE))) } } } }","description":"TBD"},{"mnemonic":"c.fsdsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"ui53","size":3},{"field":"ui86","size":3},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(STORE_FP((imm, rs2, sp, DOUBLE))) } }","description":"TBD"},{"mnemonic":"c.fsw","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b00","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE_FP((imm, rs2, rs1, WORD))) } } } }","description":"TBD"},{"mnemonic":"c.fswsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui52","size":4},{"field":"ui76","size":2},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(STORE_FP((imm, rs2, sp, WORD))) } }","description":"TBD"},{"mnemonic":"c.illegal","name":"TBD","operands":[{"name":"s","type":"half"}],"syntax":"s","format":"TBD","fields":[{"field":"s","size":16}],"extensions":[],"function":"{ handle_illegal(); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"c.j","name":"TBD","operands":[{"name":"imm","type":"bits(11)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"i11","size":1},{"field":"i4","size":1},{"field":"i98","size":2},{"field":"i10","size":1},{"field":"i6","size":1},{"field":"i7","size":1},{"field":"i31","size":3},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(RISCV_JAL((sign_extend(21, bitvector_concat(imm, 0b0)), zreg)))","description":"TBD"},{"mnemonic":"c.jal","name":"TBD","operands":[{"name":"imm","type":"bits(11)"}],"syntax":"imm,0b0","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"i11","size":1},{"field":"i4","size":1},{"field":"i98","size":2},{"field":"i10","size":1},{"field":"i6","size":1},{"field":"i7","size":1},{"field":"i31","size":3},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(RISCV_JAL((sign_extend(21, bitvector_concat(imm, 0b0)), ra)))","description":"TBD"},{"mnemonic":"c.jalr","name":"TBD","operands":[{"name":"rs1","type":"regidx"}],"syntax":"rs1","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"rs1","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RISCV_JALR((zero_extend(12, 0b0), rs1, ra)))","description":"TBD"},{"mnemonic":"c.jr","name":"TBD","operands":[{"name":"rs1","type":"regidx"}],"syntax":"rs1","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"rs1","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RISCV_JALR((zero_extend(12, 0b0), rs1, zreg)))","description":"TBD"},{"mnemonic":"c.ld","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b000","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD((imm, rs, rd, false, DOUBLE, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.ldsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui43","size":2},{"field":"ui86","size":3},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(LOAD((imm, sp, rd, false, DOUBLE, false, false))) } }","description":"TBD"},{"mnemonic":"c.li","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"imm5","size":1},{"field":"rd","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, imm) in { execute(ITYPE((imm, zreg, rd, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.li.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"imm5","size":1},{"field":"0b00000","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.lui","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"imm17","size":1},{"field":"rd","size":5},{"field":"imm1612","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let res : bits(20) = sign_extend(20, imm) in { execute(UTYPE((res, rd, RISCV_LUI))) } }","description":"TBD"},{"mnemonic":"c.lui.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"imm17","size":1},{"field":"0b00000","size":5},{"field":"imm1612","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.lw","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b00","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD((imm, rs, rd, false, WORD, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.lwsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui42","size":3},{"field":"ui76","size":2},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(LOAD((imm, sp, rd, false, WORD, false, false))) } }","description":"TBD"},{"mnemonic":"c.mv","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"rd","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RTYPE((rs2, zreg, rd, RISCV_ADD)))","description":"TBD"},{"mnemonic":"c.mv.hint.","name":"TBD","operands":[{"name":"rs2","type":"regidx"}],"syntax":"rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b00000","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.nop","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00000","size":5},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.nop.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"im5","size":1},{"field":"0b00000","size":5},{"field":"im40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.or","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b10","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_OR))) } } }","description":"TBD"},{"mnemonic":"c.sd","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b000","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE((imm, rs2, rs1, DOUBLE, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.sdsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"ui86","size":3},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(STORE((imm, rs2, sp, DOUBLE, false, false))) } }","description":"TBD"},{"mnemonic":"c.slli","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzui5","size":1},{"field":"rsd","size":5},{"field":"nzui40","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SLLI)))","description":"TBD"},{"mnemonic":"c.slli.hint.","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzui5","size":1},{"field":"rsd","size":5},{"field":"nzui40","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.srai","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"nzui5","size":1},{"field":"0b01","size":2},{"field":"rsd","size":3},{"field":"nzui40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SRAI))) } }","description":"TBD"},{"mnemonic":"c.srai.hint.","name":"TBD","operands":[{"name":"rsd","type":"cregidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"rsd","size":3},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.srli","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"nzui5","size":1},{"field":"0b00","size":2},{"field":"rsd","size":3},{"field":"nzui40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SRLI))) } }","description":"TBD"},{"mnemonic":"c.srli.hint.","name":"TBD","operands":[{"name":"rsd","type":"cregidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"rsd","size":3},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.sub","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b00","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_SUB))) } } }","description":"TBD"},{"mnemonic":"c.subw","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b00","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPEW((rs2, rsd, rsd, RISCV_SUBW))) } } }","description":"TBD"},{"mnemonic":"c.sw","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b00","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE((imm, rs2, rs1, WORD, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.swsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"ui52","size":4},{"field":"ui76","size":2},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(STORE((imm, rs2, sp, WORD, false, false))) } }","description":"TBD"},{"mnemonic":"c.xor","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b01","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_XOR))) } } }","description":"TBD"},{"mnemonic":"clmul","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc","Zbkc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftl(rs1_val, i)) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clmulh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc","Zbkc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftr(rs1_val, sub_atom(xlen_val, i))) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clmulr","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftr(rs1_val, sub_atom(sub_atom(xlen_val, i), 1))) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000000","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from sub_atom(64, 1) to 0 by 1 order dec) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clzw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000000","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 31 to 0 by 1 order dec) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"cpop","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000010","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs1_val, i), bitone) then result = add_atom(result, 1) else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"cpopw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000010","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { foreach (i from 0 to 31 by 1 order inc) { if eq_bit(bitvector_access(rs1_val, i), bitone) then result = add_atom(result, 1) else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"csrrc","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrci","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrs","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrsi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrwi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"ctz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000001","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 0 to sub_atom(64, 1) by 1 order inc) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"ctzw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000001","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 0 to 31 by 1 order inc) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"czero.eqz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000111","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zicond"],"function":"{ let value = rX_bits(rs1) in { let condition = rX_bits(rs2) in { let result : xlenbits = if neq_bits(condition, zeros_implicit(64)) then zeros_implicit(64) else value in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"czero.nez","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000111","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zicond"],"function":"{ let value = rX_bits(rs1) in { let condition = rX_bits(rs2) in { let result : xlenbits = if neq_bits(condition, zeros_implicit(64)) then zeros_implicit(64) else value in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"div","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, xlen_max_signed)) then xlen_min_signed else q in { wX_bits(rd, to_bits(64, q\')); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, xlen_max_signed)) then xlen_min_signed else q in { wX_bits(rd, to_bits(64, q\')); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divuw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, sub_atom(pow2(31), 1))) then sub_atom(0, int_power(2, 31)) else q in { wX_bits(rd, sign_extend(64, to_bits(32, q\'))); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, sub_atom(pow2(31), 1))) then sub_atom(0, int_power(2, 31)) else q in { wX_bits(rd, sign_extend(64, to_bits(32, q\'))); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"ebreak","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000001","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ handle_mem_exception(PC, E_Breakpoint()); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"ecall","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000000","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let t : sync_exception = struct { trap = match cur_privilege { User => E_U_EnvCall(), Supervisor => E_S_EnvCall(), Machine => E_M_EnvCall() }; excinfo = None() : option(xlenbits); ext = None() } in { set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC)); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"fadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fclass.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fclass.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fclass.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fcvt.d.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvtmod.w.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1100001","size":7},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let (fflags, rd_val) = fcvtmod_helper(rs1_val_D) in { accrue_fflags(fflags); wX_bits(rd, sign_extend(64, rd_val)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fdiv.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fdiv.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fdiv.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fence","name":"TBD","operands":[{"name":"pred","type":"bits(4)"},{"name":"succ","type":"bits(4)"}],"syntax":"pred,succ","format":"I","fields":[{"field":"0b0000","size":4},{"field":"pred","size":4},{"field":"succ","size":4},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ let fiom = is_fiom_active() in { let pred = effective_fence_set(pred, fiom) in { let succ = effective_fence_set(succ, fiom) in { match (pred, succ) { (_ : bits(2) @ 0b11, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_rw_rw()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_r_rw()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_r_r()), (_ : bits(2) @ 0b11, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_rw_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_w_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_w_rw()), (_ : bits(2) @ 0b11, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_rw_r()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_r_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_w_r()), (_ : bits(4), _ : bits(2) @ 0b00) => (), (_ : bits(2) @ 0b00, _ : bits(4)) => (), _ => { print(\\"FIXME: unsupported fence\\"); () } }; RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fence.i","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000000","size":12},{"field":"0b00000","size":5},{"field":"0b001","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"fence.tso","name":"TBD","operands":[{"name":"pred","type":"bits(4)"},{"name":"succ","type":"bits(4)"}],"syntax":"pred,succ","format":"I","fields":[{"field":"0b1000","size":4},{"field":"pred","size":4},{"field":"succ","size":4},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ match (pred, succ) { (_ : bits(2) @ 0b11, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_tso()), (_ : bits(2) @ 0b00, _ : bits(2) @ 0b00) => (), _ => { print(\\"FIXME: unsupported fence\\"); () } }; RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"feq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"feq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"feq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flb","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fld","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fle.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fle.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fle.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let rs2_val_D = rF_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le_quiet(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le_quiet(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le_quiet(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fli.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let bits : bits(64) = match constantidx { 0b00000 => { 0xbff0000000000000 }, 0b00001 => { 0x0010000000000000 }, 0b00010 => { 0x3Ef0000000000000 }, 0b00011 => { 0x3f00000000000000 }, 0b00100 => { 0x3f70000000000000 }, 0b00101 => { 0x3f80000000000000 }, 0b00110 => { 0x3fb0000000000000 }, 0b00111 => { 0x3fc0000000000000 }, 0b01000 => { 0x3fd0000000000000 }, 0b01001 => { 0x3fd4000000000000 }, 0b01010 => { 0x3fd8000000000000 }, 0b01011 => { 0x3fdc000000000000 }, 0b01100 => { 0x3fe0000000000000 }, 0b01101 => { 0x3fe4000000000000 }, 0b01110 => { 0x3fe8000000000000 }, 0b01111 => { 0x3fec000000000000 }, 0b10000 => { 0x3ff0000000000000 }, 0b10001 => { 0x3ff4000000000000 }, 0b10010 => { 0x3ff8000000000000 }, 0b10011 => { 0x3ffc000000000000 }, 0b10100 => { 0x4000000000000000 }, 0b10101 => { 0x4004000000000000 }, 0b10110 => { 0x4008000000000000 }, 0b10111 => { 0x4010000000000000 }, 0b11000 => { 0x4020000000000000 }, 0b11001 => { 0x4030000000000000 }, 0b11010 => { 0x4060000000000000 }, 0b11011 => { 0x4070000000000000 }, 0b11100 => { 0x40e0000000000000 }, 0b11101 => { 0x40f0000000000000 }, 0b11110 => { 0x7ff0000000000000 }, _ : bitvector(5) => { canonical_NaN_D() } } in { wF_D(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"fli.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let bits : bits(16) = match constantidx { 0b00000 => { 0xbc00 }, 0b00001 => { 0x0400 }, 0b00010 => { 0x0100 }, 0b00011 => { 0x0200 }, 0b00100 => { 0x1c00 }, 0b00101 => { 0x2000 }, 0b00110 => { 0x2c00 }, 0b00111 => { 0x3000 }, 0b01000 => { 0x3400 }, 0b01001 => { 0x3500 }, 0b01010 => { 0x3600 }, 0b01011 => { 0x3700 }, 0b01100 => { 0x3800 }, 0b01101 => { 0x3900 }, 0b01110 => { 0x3a00 }, 0b01111 => { 0x3b00 }, 0b10000 => { 0x3c00 }, 0b10001 => { 0x3d00 }, 0b10010 => { 0x3e00 }, 0b10011 => { 0x3f00 }, 0b10100 => { 0x4000 }, 0b10101 => { 0x4100 }, 0b10110 => { 0x4200 }, 0b10111 => { 0x4400 }, 0b11000 => { 0x4800 }, 0b11001 => { 0x4c00 }, 0b11010 => { 0x5800 }, 0b11011 => { 0x5c00 }, 0b11100 => { 0x7800 }, 0b11101 => { 0x7c00 }, 0b11110 => { 0x7c00 }, _ : bitvector(5) => { canonical_NaN_H() } } in { wF_H(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"fli.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let bits : bits(32) = match constantidx { 0b00000 => { 0xbf800000 }, 0b00001 => { 0x00800000 }, 0b00010 => { 0x37800000 }, 0b00011 => { 0x38000000 }, 0b00100 => { 0x3b800000 }, 0b00101 => { 0x3c000000 }, 0b00110 => { 0x3d800000 }, 0b00111 => { 0x3e000000 }, 0b01000 => { 0x3e800000 }, 0b01001 => { 0x3ea00000 }, 0b01010 => { 0x3ec00000 }, 0b01011 => { 0x3ee00000 }, 0b01100 => { 0x3f000000 }, 0b01101 => { 0x3f200000 }, 0b01110 => { 0x3f400000 }, 0b01111 => { 0x3f600000 }, 0b10000 => { 0x3f800000 }, 0b10001 => { 0x3fa00000 }, 0b10010 => { 0x3fc00000 }, 0b10011 => { 0x3fe00000 }, 0b10100 => { 0x40000000 }, 0b10101 => { 0x40200000 }, 0b10110 => { 0x40400000 }, 0b10111 => { 0x40800000 }, 0b11000 => { 0x41000000 }, 0b11001 => { 0x41800000 }, 0b11010 => { 0x43000000 }, 0b11011 => { 0x43800000 }, 0b11100 => { 0x47000000 }, 0b11101 => { 0x47800000 }, 0b11110 => { 0x7f800000 }, _ : bitvector(5) => { canonical_NaN_S() } } in { wF_S(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"flt.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flt.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flt.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let rs2_val_D = rF_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Lt_quiet(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Lt_quiet(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Lt_quiet(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmax.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmax.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmax.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmaxm.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { let rs2_val_D = rF_bits(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_D(rs2_val_D, rs1_val_D, is_quiet) in { let rd_val_D = if or_bool(f_is_NaN_D(rs1_val_D), f_is_NaN_D(rs2_val_D)) then canonical_NaN_D() else if and_bool(f_is_neg_zero_D(rs1_val_D), f_is_pos_zero_D(rs2_val_D)) then rs2_val_D else if and_bool(f_is_neg_zero_D(rs2_val_D), f_is_pos_zero_D(rs1_val_D)) then rs1_val_D else if rs2_lt_rs1 then rs1_val_D else rs2_val_D in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmaxm.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_H(rs2_val_H, rs1_val_H, is_quiet) in { let rd_val_H = if or_bool(f_is_NaN_H(rs1_val_H), f_is_NaN_H(rs2_val_H)) then canonical_NaN_H() else if and_bool(f_is_neg_zero_H(rs1_val_H), f_is_pos_zero_H(rs2_val_H)) then rs2_val_H else if and_bool(f_is_neg_zero_H(rs2_val_H), f_is_pos_zero_H(rs1_val_H)) then rs1_val_H else if rs2_lt_rs1 then rs1_val_H else rs2_val_H in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmaxm.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_S(rs2_val_S, rs1_val_S, is_quiet) in { let rd_val_S = if or_bool(f_is_NaN_S(rs1_val_S), f_is_NaN_S(rs2_val_S)) then canonical_NaN_S() else if and_bool(f_is_neg_zero_S(rs1_val_S), f_is_pos_zero_S(rs2_val_S)) then rs2_val_S else if and_bool(f_is_neg_zero_S(rs2_val_S), f_is_pos_zero_S(rs1_val_S)) then rs1_val_S else if rs2_lt_rs1 then rs1_val_S else rs2_val_S in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmin.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmin.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmin.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fminm.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { let rs2_val_D = rF_bits(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_D(rs1_val_D, rs2_val_D, is_quiet) in { let rd_val_D = if or_bool(f_is_NaN_D(rs1_val_D), f_is_NaN_D(rs2_val_D)) then canonical_NaN_D() else if and_bool(f_is_neg_zero_D(rs1_val_D), f_is_pos_zero_D(rs2_val_D)) then rs1_val_D else if and_bool(f_is_neg_zero_D(rs2_val_D), f_is_pos_zero_D(rs1_val_D)) then rs2_val_D else if rs1_lt_rs2 then rs1_val_D else rs2_val_D in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fminm.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_H(rs1_val_H, rs2_val_H, is_quiet) in { let rd_val_H = if or_bool(f_is_NaN_H(rs1_val_H), f_is_NaN_H(rs2_val_H)) then canonical_NaN_H() else if and_bool(f_is_neg_zero_H(rs1_val_H), f_is_pos_zero_H(rs2_val_H)) then rs1_val_H else if and_bool(f_is_neg_zero_H(rs2_val_H), f_is_pos_zero_H(rs1_val_H)) then rs2_val_H else if rs1_lt_rs2 then rs1_val_H else rs2_val_H in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fminm.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_S(rs1_val_S, rs2_val_S, is_quiet) in { let rd_val_S = if or_bool(f_is_NaN_S(rs1_val_S), f_is_NaN_S(rs2_val_S)) then canonical_NaN_S() else if and_bool(f_is_neg_zero_S(rs1_val_S), f_is_pos_zero_S(rs2_val_S)) then rs1_val_S else if and_bool(f_is_neg_zero_S(rs2_val_S), f_is_pos_zero_S(rs1_val_S)) then rs2_val_S else if rs1_lt_rs2 then rs1_val_S else rs2_val_S in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmul.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmul.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmul.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmv.d.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.h.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.w.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmvh.x.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1110001","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = subrange_bits(rF_D(rs1), 63, 32) in { let rd_val_X : xlenbits = sign_extend(64, rs1_val_D) in { wX_bits(rd, rd_val_X); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmvp.d.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1011001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_X = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val_X = subrange_bits(rX_bits(rs2), 31, 0) in { let rd_val_D = bitvector_concat(rs2_val_X, rs1_val_X) in { wF_D(rd, rd_val_D); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fnmadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fround.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100001","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_f64roundToInt(rm_3b, rs1_val_D, false) in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fround.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100010","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_f16roundToInt(rm_3b, rs1_val_H, false) in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fround.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_f32roundToInt(rm_3b, rs1_val_S, false) in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100001","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_f64roundToInt(rm_3b, rs1_val_D, true) in { accrue_fflags(fflags); wF_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100010","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_f16roundToInt(rm_3b, rs1_val_H, true) in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_f32roundToInt(rm_3b, rs1_val_S, true) in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsb","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsd","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsgnj.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnj.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnj.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsh","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsw","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"illegal","name":"TBD","operands":[{"name":"s","type":"word"}],"syntax":"s","format":"TBD","fields":[{"field":"s","size":32}],"extensions":[],"function":"{ handle_illegal(); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"jal","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(21)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm_19","size":1},{"field":"imm_18_13","size":6},{"field":"imm_12_9","size":4},{"field":"imm_8","size":1},{"field":"imm_7_0","size":8},{"field":"rd","size":5},{"field":"0b1101111","size":7}],"extensions":[],"function":"{ let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { wX_bits(rd, get_next_pc()); set_next_pc(target); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"jalr","name":"jump and link register","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"I","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1100111","size":7}],"extensions":[],"function":"{ let t : xlenbits = add_bits(rX_bits(rs1), sign_extend(64, imm)) in { match ext_control_check_addr(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(addr) => { let target = bitvector_update(addr, 0, bitzero) in { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { wX_bits(rd, get_next_pc()); set_next_pc(target); RETIRE_SUCCESS } } } } } }","description":"\\nThe target address is obtained by adding the sign-extended 12-bit\\nI-immediate to the register rs1, then setting the\\nleast-significant bit of the result to zero. The address of the\\ninstruction following the jump (pc+4) is written to register rd.\\nRegister x0 can be used as the destination if the result is not\\nrequired.\\n "},{"mnemonic":"lb","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lr.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lui","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(20)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm","size":20},{"field":"rd","size":5},{"field":"encdec_uop(op)","size":7}],"extensions":[],"function":"{ let off : xlenbits = sign_extend(64, bitvector_concat(imm, 0x000)) in { let ret : xlenbits = match op { RISCV_LUI => off, RISCV_AUIPC => add_bits(get_arch_pc(), off) } in { wX_bits(rd, ret); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"lw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"max","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"maxu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"min","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"minu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"mret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0011000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ if neq_anything(cur_privilege, Machine) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_xret_priv(Machine)) then { ext_fail_xret_priv(); RETIRE_FAIL } else { set_next_pc(exception_handler(cur_privilege, CTL_MRET(), PC)); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"mul","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulhsu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulhu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = signed(rs1_val) in { let rs2_int : int = signed(rs2_val) in { let result32 = subrange_bits(to_bits(64, mult_atom(rs1_int, rs2_int)), 31, 0) in { let result : xlenbits = sign_extend(64, result32) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"or","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"orc.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b001010000111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = if eq_bits(subrange_bits(rs1_val, add_atom(i, 7), i), zeros_implicit(add_atom(sub_atom(add_atom(__id(i), 7), __id(i)), 1))) then 0x00 else 0xFF; wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"ori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"orn","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"pack","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_PACK => bitvector_concat(subrange_bits(rs2_val, sub_atom(mult_atom(8, 4), 1), 0), subrange_bits(rs1_val, sub_atom(mult_atom(8, 4), 1), 0)), RISCV_PACKH => zero_extend(64, bitvector_concat(subrange_bits(rs2_val, 7, 0), subrange_bits(rs1_val, 7, 0))) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"packh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_PACK => bitvector_concat(subrange_bits(rs2_val, sub_atom(mult_atom(8, 4), 1), 0), subrange_bits(rs1_val, sub_atom(mult_atom(8, 4), 1), 0)), RISCV_PACKH => zero_extend(64, bitvector_concat(subrange_bits(rs2_val, 7, 0), subrange_bits(rs1_val, 7, 0))) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"packw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zbkb.sail:109.27-109.28\\"); let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : bits(32) = bitvector_concat(subrange_bits(rs2_val, 15, 0), subrange_bits(rs1_val, 15, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rem","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, to_bits(64, r)); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, to_bits(64, r)); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remuw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, sign_extend(64, to_bits(32, r))); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, sign_extend(64, to_bits(32, r))); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"rev8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011010111000","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = subrange_bits(rs1_val, sub_atom(sub_atom(64, i), 1), sub_atom(sub_atom(64, i), 8)); wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"rol","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rolw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let shamt = subrange_bits(rX_bits(rs2), 4, 0) in { let result : bits(32) = match op { RISCV_ROLW => rotate_bits_left(rs1_val, shamt), RISCV_RORW => rotate_bits_right(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"ror","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b011000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else rotate_bits_right(rs1_val, shamt) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"roriw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : xlenbits = sign_extend(64, rotate_bits_right(rs1_val, shamt)) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"rorw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let shamt = subrange_bits(rX_bits(rs2), 4, 0) in { let result : bits(32) = match op { RISCV_ROLW => rotate_bits_left(rs1_val, shamt), RISCV_RORW => rotate_bits_right(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sb","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sc.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sd","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sext.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sext.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sfence.vma","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rs1,rs2","format":"R","fields":[{"field":"0b0001001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let addr : option(xlenbits) = if eq_bits(rs1, 0b00000) then None() else Some(rX_bits(rs1)) in { let asid : option(xlenbits) = if eq_bits(rs2, 0b00000) then None() else Some(rX_bits(rs2)) in { match cur_privilege { User => { handle_illegal(); RETIRE_FAIL }, Supervisor => match (architecture(get_mstatus_SXL(mstatus)), _get_Mstatus_TVM(mstatus)) { (Some(_), 0b1) => { handle_illegal(); RETIRE_FAIL }, (Some(_), 0b0) => { flush_TLB(asid, addr); RETIRE_SUCCESS }, (_, _) => internal_error(\\"model/riscv_insts_base.sail\\", 866, \\"unimplemented sfence architecture\\") }, Machine => { flush_TLB(asid, addr); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh1add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh1add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh2add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh2add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh3add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh3add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sha256sig0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00010","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 7), xor_vec(rotater(inb, 18), shiftr(inb, 3))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sig1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 17), xor_vec(rotater(inb, 19), shiftr(inb, 10))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sum0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 2), xor_vec(rotater(inb, 13), rotater(inb, 22))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sum1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00001","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 6), xor_vec(rotater(inb, 11), rotater(inb, 25))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00110","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:452.27-452.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 1), xor_vec(rotater(input, 8), shiftr(input, 7))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig0h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01110","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftr(rX_bits(rs1), 1), xor_vec(shiftr(rX_bits(rs1), 7), xor_vec(shiftr(rX_bits(rs1), 8), xor_vec(shiftl(rX_bits(rs2), 31), shiftl(rX_bits(rs2), 24))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig0l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01010","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftr(rX_bits(rs1), 1), xor_vec(shiftr(rX_bits(rs1), 7), xor_vec(shiftr(rX_bits(rs1), 8), xor_vec(shiftl(rX_bits(rs2), 31), xor_vec(shiftl(rX_bits(rs2), 25), shiftl(rX_bits(rs2), 24)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00111","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:460.27-460.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 19), xor_vec(rotater(input, 61), shiftr(input, 6))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig1h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 3), xor_vec(shiftr(rX_bits(rs1), 6), xor_vec(shiftr(rX_bits(rs1), 19), xor_vec(shiftr(rX_bits(rs2), 29), shiftl(rX_bits(rs2), 13))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig1l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 3), xor_vec(shiftr(rX_bits(rs1), 6), xor_vec(shiftr(rX_bits(rs1), 19), xor_vec(shiftr(rX_bits(rs2), 29), xor_vec(shiftl(rX_bits(rs2), 26), shiftl(rX_bits(rs2), 13)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sum0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:468.27-468.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 28), xor_vec(rotater(input, 34), rotater(input, 39))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sum0r","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01000","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 25), xor_vec(shiftl(rX_bits(rs1), 30), xor_vec(shiftr(rX_bits(rs1), 28), xor_vec(shiftr(rX_bits(rs2), 7), xor_vec(shiftr(rX_bits(rs2), 2), shiftl(rX_bits(rs2), 4)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sum1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:476.27-476.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 14), xor_vec(rotater(input, 18), rotater(input, 41))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sum1r","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 23), xor_vec(shiftr(rX_bits(rs1), 14), xor_vec(shiftr(rX_bits(rs1), 18), xor_vec(shiftr(rX_bits(rs2), 9), xor_vec(shiftl(rX_bits(rs2), 18), shiftl(rX_bits(rs2), 14)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sll","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"slli.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b000010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"slliw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sllw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slt","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sltiu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sltu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sm3p0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zksh"],"function":"{ let r1 : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(r1, xor_vec(rotatel(r1, 9), rotatel(r1, 17))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sm3p1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b01001","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zksh"],"function":"{ let r1 : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(r1, xor_vec(rotatel(r1, 15), rotatel(r1, 23))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sm4ed","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b11000","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zksed"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let sb_in : bits(8) = subrange_bits(shift_bits_right(subrange_bits(rX_bits(rs2), 31, 0), shamt), 7, 0) in { let x : bits(32) = bitvector_concat(0x000000, sm4_sbox(sb_in)) in { let y : bits(32) = xor_vec(x, xor_vec(shiftl(x, 8), xor_vec(shiftl(x, 2), xor_vec(shiftl(x, 18), xor_vec(shiftl(and_vec(x, 0x0000003F), 26), shiftl(and_vec(x, 0x000000C0), 10)))))) in { let z : bits(32) = rotate_bits_left(y, shamt) in { let result : bits(32) = xor_vec(z, subrange_bits(rX_bits(rs1), 31, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"sm4ks","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b11010","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zksed"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let sb_in : bits(8) = subrange_bits(shift_bits_right(subrange_bits(rX_bits(rs2), 31, 0), shamt), 7, 0) in { let x : bits(32) = bitvector_concat(0x000000, sm4_sbox(sb_in)) in { let y : bits(32) = xor_vec(x, xor_vec(shiftl(and_vec(x, 0x00000007), 29), xor_vec(shiftl(and_vec(x, 0x000000FE), 7), xor_vec(shiftl(and_vec(x, 0x00000001), 23), shiftl(and_vec(x, 0x000000F8), 13))))) in { let z : bits(32) = rotate_bits_left(y, shamt) in { let result : bits(32) = xor_vec(z, subrange_bits(rX_bits(rs1), 31, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"sra","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"srai","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sraiw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sraw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0001000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let sret_illegal : bool = match cur_privilege { User => true, Supervisor => or_bool(not(haveSupMode()), eq_bits(_get_Mstatus_TSR(mstatus), 0b1)), Machine => not(haveSupMode()) } in { if sret_illegal then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_xret_priv(Supervisor)) then { ext_fail_xret_priv(); RETIRE_FAIL } else { set_next_pc(exception_handler(cur_privilege, CTL_SRET(), PC)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"srli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srliw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srlw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sub","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"subw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sw","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"unzip","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b000010001111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 32), \\"model/riscv_insts_zbkb.sail:148.27-148.28\\"); exit () }","description":"TBD"},{"mnemonic":"uret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0000000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ if or_bool(not(haveUsrMode()), not(sys_enable_next())) then handle_illegal() else if not(ext_check_xret_priv(User)) then ext_fail_xret_priv() else set_next_pc(exception_handler(cur_privilege, CTL_URET(), PC)); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"vaadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"encdec_vimsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VIMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VVMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VVMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VXMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VXMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vcompress.vm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if or_bool(neq_int(start_element, 0), or_bool(eq_bits(vs1, vd), or_bool(eq_bits(vs2, vd), illegal_vd_unmasked()))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var vd_idx : nat = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lteq_int(i, end_element) then { if plain_vector_access(vs1_val, i) then { let p as \'p = vd_idx in { assert(lt_int(__id(p), __id(n)), \\"model/riscv_insts_vext_arith.sail:1877.22-1877.23\\"); result[__id(p)] = plain_vector_access(vs2_val, i); vd_idx = add_atom(vd_idx, 1) } } else () } else () }; if lt_int(vd_idx, num_elem) then { let tail_ag : agtype = get_vtype_vta() in { let p as \'p = vd_idx in { foreach (i from __id(p) to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } } } } else (); write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdiv.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdiv.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdivu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdivu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfclass.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.f.x.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.f.xu.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.rtz.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.rtz.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfdiv.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfdiv.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfirst.m","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"rd,vs2vm","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10001","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_vd_unmasked(), not(assert_vstart(0))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vs2_val, vm_val); var index : int = -1 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if eq_int(index, -1) then { if and_bool(plain_vector_access(mask, i), plain_vector_access(vs2_val, i)) then index = i else () } else () }; wX_bits(rd, to_bits(64, index)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmax.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmax.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmerge.vfm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_fp_vd_masked(vd, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:1247.17-1247.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then rs1_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmin.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmin.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmul.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.f.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"rd,vs2","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"0b00000","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if or_bool(illegal_fp_vd_unmasked(SEW, rm_3b), gt_int(SEW, 64)) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gt_int(num_elem, 0), neq_int(SEW, 8)), \\"model/riscv_insts_vext_fp.sail:858.32-858.33\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vs2) in { match __id(m) { 16 => wF_H(rd, plain_vector_access(vs2_val, 0)), 32 => wF_S(rd, plain_vector_access(vs2_val, 0)), _ => wF_D(rd, plain_vector_access(vs2_val, 0)) }; vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.s.f","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gt_int(num_elem, 0), neq_int(SEW, 8)), \\"model/riscv_insts_vext_fp.sail:1332.32-1332.33\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, 0, vd_val, vm_val); if plain_vector_access(mask, 0) then result[0] = rs1_val else (); let tail_ag : agtype = get_vtype_vta() in { foreach (i from 1 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } }; write_vreg(num_elem, SEW, 0, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.v.f","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:1295.17-1295.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = rs1_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.x.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.xu.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rod.f.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rtz.x.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rtz.xu.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.x.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.xu.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrdiv.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrec7.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfredmax.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredmin.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredosum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredusum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfrsqrt7.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnj.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnj.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjn.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjn.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjx.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjx.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfslide1down.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfslide1up.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsqrt.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.wf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1193.36-1193.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)), FWF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:345.36-345.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))), FWV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.x.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.xu.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.rtz.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.rtz.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmul.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwredosum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfwredusum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfwsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.wf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1193.36-1193.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)), FWF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:345.36-345.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))), FWV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vid.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vdvm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"0b10001","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = to_bits(SEW, i) else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } }","description":"TBD"},{"mnemonic":"viota.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10000","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); var sum : int = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = to_bits(SEW, sum); if plain_vector_access(vs2_val, i) then sum = add_atom(sum, 1) else () } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vle16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlm.v","name":"TBD","operands":[{"name":"vd_or_vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd_or_vs3,(rs1)","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01011","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vd_or_vs3","size":5},{"field":"encdec_lsop(op)","size":7}],"extensions":["V"],"function":"{ let EEW = 8 in { let EMUL_pow = 0 in { let vl_val = unsigned(vl) in { let evl : int = if eq_int(emod_int(vl_val, 8), 0) then quot_round_zero(vl_val, 8) else add_atom(quot_round_zero(vl_val, 8), 1) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gteq_int(evl, 0), \\"model/riscv_insts_vext_mem.sail:929.17-929.18\\"); process_vm(vd_or_vs3, rs1, num_elem, evl, op) } } } } } }","description":"TBD"},{"mnemonic":"vloxei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlre16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlse16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmacc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"}],"syntax":"vd,vs2,simm","format":"TBD","fields":[{"field":"encdec_vimcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VIMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), sub_atom(pow2(SEW), 1)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"encdec_vimfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VIM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_vvmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), sub_atom(pow2(SEW), 1)), VVMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VVM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,vs2,rs1","format":"TBD","fields":[{"field":"encdec_vxmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), sub_atom(pow2(SEW), 1)), VXMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VXM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmand.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmandnot.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmax.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmax.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmaxu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmaxu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then imm_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then plain_vector_access(vs1_val, i) else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then rs1_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfeq.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfeq.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfge.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfgt.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfle.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfle.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmflt.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmflt.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfne.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfne.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmin.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmin.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vminu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vminu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmnand.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmnor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmornot.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_vvmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), sub_atom(pow2(SEW), 1)), VVMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VVM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,vs2,rs1","format":"TBD","fields":[{"field":"encdec_vxmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), sub_atom(pow2(SEW), 1)), VXMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VXM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbf.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00001","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { if plain_vector_access(vs2_val, i) then found_elem = true else (); result[i] = if found_elem then false else true } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgt.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgt.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgtu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgtu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsif.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00011","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = if found_elem then false else true; if plain_vector_access(vs2_val, i) then found_elem = true else () } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmslt.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmslt.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsltu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsltu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsof.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00010","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { if and_bool(plain_vector_access(vs2_val, i), not(found_elem)) then { result[i] = true; found_elem = true } else { result[i] = false } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulh.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulh.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.s.x","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gt_int(num_elem, 0), \\"model/riscv_insts_vext_arith.sail:2301.21-2301.22\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, __id(m)) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, 0, vd_val, vm_val); if plain_vector_access(mask, 0) then result[0] = rs1_val else (); let tail_ag : agtype = get_vtype_vta() in { foreach (i from 1 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } }; write_vreg(num_elem, SEW, 0, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.i","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"simm","type":"bits(5)"}],"syntax":"vd,simm","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = imm_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = plain_vector_access(vs1_val, i) else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.x","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, __id(m)) in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = rs1_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.x.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"rd,vs2","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"0b00000","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gt_int(num_elem, 0), \\"model/riscv_insts_vext_arith.sail:1830.21-1830.22\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vs2) in { wX_bits(rd, if lt_int(64, SEW) then slice(plain_vector_access(vs2_val, 0), 0, 64) else if gt_int(64, SEW) then sign_extend(64, plain_vector_access(vs2_val, 0)) else plain_vector_access(vs2_val, 0)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"vmv1r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv2r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv4r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv8r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmxnor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmxor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:1043.24-1043.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NI_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NI_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:301.24-301.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NV_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NV_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:653.24-653.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NX_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NX_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:1043.24-1043.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NI_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NI_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:301.24-301.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NV_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NV_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:653.24-653.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NX_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NX_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsac.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nisfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:976.24-976.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NIS_VNSRL => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NIS_VNSRA => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:234.24-234.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NVS_VNSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NVS_VNSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:586.24-586.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NXS_VNSRL => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NXS_VNSRA => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nisfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:976.24-976.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NIS_VNSRL => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NIS_VNSRA => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:234.24-234.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NVS_VNSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NVS_VNSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:586.24-586.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NXS_VNSRL => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NXS_VNSRA => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vpopc.m","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"rd,vs2vm","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10000","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_vd_unmasked(), not(assert_vstart(0))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vs2_val, vm_val); var count : nat = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if and_bool(plain_vector_access(mask, i), plain_vector_access(vs2_val, i)) then count = add_atom(count, 1) else () }; wX_bits(rd, to_bits(64, count)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredand.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmax.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmaxu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmin.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredminu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredor.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredsum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredxor.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrem.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrem.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vremu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vremu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgatherei16.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrsub.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsbc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VVMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VVMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsbc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VXMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VXMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vse16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetivli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,uimm,sewlmultama","format":"TBD","fields":[{"field":"0b1100","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"uimm","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))); let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { let AVL = unsigned(uimm) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetvli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,rs1,sewlmultama","format":"TBD","fields":[{"field":"encdec_vsetop(op)","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { match op { VSETVLI => { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))) }, VSETVL => { let rs2 : regidx = bitvector_concat(subrange_bits(sew, 1, 0), lmul) in { _set_Vtype_bits(ref vtype, rX_bits(rs2)) } } }; let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { if neq_bits(rs1, 0b00000) then { let rs1_val = rX_bits(rs1) in { let AVL = unsigned(rs1_val) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl) } } } else if neq_bits(rd, 0b00000) then { let AVL = unsigned(ones(64)) in { vl = to_bits(64, VLMAX); wX_bits(rd, vl) } } else { let AVL = unsigned(vl) in { let ratio_pow_new = sub_atom(SEW_pow_new, LMUL_pow_new) in { if neq_int(ratio_pow_new, ratio_pow_ori) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64) } else () } } }; print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetvli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,rs1,sewlmultama","format":"TBD","fields":[{"field":"encdec_vsetop(op)","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { match op { VSETVLI => { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))) }, VSETVL => { let rs2 : regidx = bitvector_concat(subrange_bits(sew, 1, 0), lmul) in { _set_Vtype_bits(ref vtype, rX_bits(rs2)) } } }; let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { if neq_bits(rs1, 0b00000) then { let rs1_val = rX_bits(rs1) in { let AVL = unsigned(rs1_val) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl) } } } else if neq_bits(rd, 0b00000) then { let AVL = unsigned(ones(64)) in { vl = to_bits(64, VLMAX); wX_bits(rd, vl) } } else { let AVL = unsigned(vl) in { let ratio_pow_new = sub_atom(SEW_pow_new, LMUL_pow_new) in { if neq_int(ratio_pow_new, ratio_pow_ori) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64) } else () } } }; print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf2","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext2_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_half = quot_round_zero(SEW, 2) in { let LMUL_pow_half = sub_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_half, LMUL_pow_half), not(valid_reg_overlap(vs2, vd, LMUL_pow_half, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_half in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_half, LMUL_pow_half, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_half), \\"model/riscv_insts_vext_arith.sail:1679.23-1679.24\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT2_ZVF2 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT2_SVF2 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf4","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext4_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_quart = quot_round_zero(SEW, 4) in { let LMUL_pow_quart = sub_atom(LMUL_pow, 2) in { if or_bool(illegal_variable_width(vd, vm, SEW_quart, LMUL_pow_quart), not(valid_reg_overlap(vs2, vd, LMUL_pow_quart, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_quart in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_quart, LMUL_pow_quart, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_quart), \\"model/riscv_insts_vext_arith.sail:1737.24-1737.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT4_ZVF4 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT4_SVF4 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf8","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext8_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_eighth = quot_round_zero(SEW, 8) in { let LMUL_pow_eighth = sub_atom(LMUL_pow, 3) in { if or_bool(illegal_variable_width(vd, vm, SEW_eighth, LMUL_pow_eighth), not(valid_reg_overlap(vs2, vd, LMUL_pow_eighth, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_eighth in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_eighth, LMUL_pow_eighth, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_eighth), \\"model/riscv_insts_vext_arith.sail:1795.25-1795.26\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT8_ZVF8 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT8_SVF8 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslide1down.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslide1up.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslidedown.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslidedown.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslideup.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslideup.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsm.v","name":"TBD","operands":[{"name":"vd_or_vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd_or_vs3,(rs1)","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01011","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vd_or_vs3","size":5},{"field":"encdec_lsop(op)","size":7}],"extensions":["V"],"function":"{ let EEW = 8 in { let EMUL_pow = 0 in { let vl_val = unsigned(vl) in { let evl : int = if eq_int(emod_int(vl_val, 8), 0) then quot_round_zero(vl_val, 8) else add_atom(quot_round_zero(vl_val, 8), 1) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gteq_int(evl, 0), \\"model/riscv_insts_vext_mem.sail:929.17-929.18\\"); process_vm(vd_or_vs3, rs1, num_elem, evl, op) } } } } } }","description":"TBD"},{"mnemonic":"vsmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsr.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsra.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsra.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsra.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vssra.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssra.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssra.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmacc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccus.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwredsum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rivvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW_widen) in { if illegal_reduction_widen(SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'o)) = read_vreg(num_elem_vd, SEW_widen, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'o) = read_single_element(SEW_widen, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let elem : bits(\'o) = match funct6 { IVV_VWREDSUMU => to_bits(SEW_widen, unsigned(plain_vector_access(vs2_val, i))), IVV_VWREDSUM => to_bits(SEW_widen, signed(plain_vector_access(vs2_val, i))) } in { sum = add_bits(sum, elem) } } else () }; write_single_element(SEW_widen, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwredsumu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rivvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW_widen) in { if illegal_reduction_widen(SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'o)) = read_vreg(num_elem_vd, SEW_widen, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'o) = read_single_element(SEW_widen, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let elem : bits(\'o) = match funct6 { IVV_VWREDSUMU => to_bits(SEW_widen, unsigned(plain_vector_access(vs2_val, i))), IVV_VWREDSUM => to_bits(SEW_widen, signed(plain_vector_access(vs2_val, i))) } in { sum = add_bits(sum, elem) } } else () }; write_single_element(SEW_widen, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf2","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext2_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_half = quot_round_zero(SEW, 2) in { let LMUL_pow_half = sub_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_half, LMUL_pow_half), not(valid_reg_overlap(vs2, vd, LMUL_pow_half, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_half in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_half, LMUL_pow_half, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_half), \\"model/riscv_insts_vext_arith.sail:1679.23-1679.24\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT2_ZVF2 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT2_SVF2 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf4","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext4_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_quart = quot_round_zero(SEW, 4) in { let LMUL_pow_quart = sub_atom(LMUL_pow, 2) in { if or_bool(illegal_variable_width(vd, vm, SEW_quart, LMUL_pow_quart), not(valid_reg_overlap(vs2, vd, LMUL_pow_quart, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_quart in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_quart, LMUL_pow_quart, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_quart), \\"model/riscv_insts_vext_arith.sail:1737.24-1737.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT4_ZVF4 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT4_SVF4 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf8","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext8_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_eighth = quot_round_zero(SEW, 8) in { let LMUL_pow_eighth = sub_atom(LMUL_pow, 3) in { if or_bool(illegal_variable_width(vd, vm, SEW_eighth, LMUL_pow_eighth), not(valid_reg_overlap(vs2, vd, LMUL_pow_eighth, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_eighth in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_eighth, LMUL_pow_eighth, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_eighth), \\"model/riscv_insts_vext_arith.sail:1795.25-1795.26\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT8_ZVF8 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT8_SVF8 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"wfi","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000100000101","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"match cur_privilege { Machine => { platform_wfi(); RETIRE_SUCCESS }, Supervisor => if eq_bits(_get_Mstatus_TW(mstatus), 0b1) then { handle_illegal(); RETIRE_FAIL } else { platform_wfi(); RETIRE_SUCCESS }, User => { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"xnor","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xor","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xperm4","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkx"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 4) by 4 order inc) { { let index = unsigned(subrange_bits(rs2_val, add_atom(i, 3), i)) in { result[add_atom(i, 3) .. i] = if lt_int(mult_atom(4, index), 64) then subrange_bits(rs1_val, add_atom(mult_atom(4, index), 3), mult_atom(4, index)) else zeros_implicit(add_atom(sub_atom(add_atom(mult_atom(4, __id(index)), 3), mult_atom(4, __id(index))), 1)) } }; wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xperm8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkx"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { { let index = unsigned(subrange_bits(rs2_val, add_atom(i, 7), i)) in { result[add_atom(i, 7) .. i] = if lt_int(mult_atom(8, index), 64) then subrange_bits(rs1_val, add_atom(mult_atom(8, index), 7), mult_atom(8, index)) else zeros_implicit(add_atom(sub_atom(add_atom(mult_atom(8, __id(index)), 7), mult_atom(8, __id(index))), 1)) } }; wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"zext.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"zip","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b000010001111","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 32), \\"model/riscv_insts_zbkb.sail:127.27-127.28\\"); exit () }","description":"TBD"}],"bd":["I","R","TBD"],"Rw":["C","D","F","V","Zba","Zbb","Zbc","Zbkb","Zbkc","Zbkx","Zbs","Zfa","Zfh","Zicond","Zknd","Zkne","Zknh","Zksed","Zksh"]}'),Gx=t(29),Qx=[];function Jx(e,i,t){Qx.push(e)}var $x=function(e){l(t,e);var i=v(t);function t(e){var _;return s(this,t),(_=i.call(this,e)).genData=function(e){for(var i=[],t=0;t0){s="(";for(var a="",n=0;n=0;_--)t.push((0,Yx.jsx)("td",{className:"instruction-bit-number",children:("0"+_.toString()).slice(-2)},_));return t}},{key:"displayLayoutRows",value:function(e,i){for(var t=[],_=0,s=0,a=0;a=i&&(t.push((0,Yx.jsx)("tr",{children:this.displayFields(e.slice(s,a+1))},s)),s=a+1,_=0);return t}},{key:"displayLayout",value:function(e){for(var i=[],t=0,_=0;_32&&(t=32),i.push(this.displayLayoutRows(e,t)),i.push((0,Yx.jsx)("tr",{children:this.displayBitScale(e,t)},"bitScale")),i}},{key:"genItem",value:function(e){return(0,Yx.jsx)("div",{className:"expandContainer",children:(0,Yx.jsxs)("div",{className:"column",children:[this.displayMnemonic(e),(0,Yx.jsx)("br",{}),(0,Yx.jsx)("table",{style:{width:"100%"},children:(0,Yx.jsx)("tbody",{children:(0,Yx.jsxs)("tr",{children:[(0,Yx.jsx)("td",{children:(0,Yx.jsx)("table",{className:"instruction-layout",children:(0,Yx.jsx)("tbody",{children:this.displayLayout(e.fields)})})}),(0,Yx.jsxs)("td",{style:{textAlign:"right"},children:[e.format,"-type"]})]})})}),(0,Yx.jsx)("br",{}),(0,Yx.jsx)(Gx.CopyToClipboard,{text:e.function,children:(0,Yx.jsx)(kE,{className:"pseudocode",type:"multi",feedback:"Copied to clipboard",children:(0,Yx.jsx)("p",{className:"inner",children:e.function})},"pseudocode")}),(0,Yx.jsx)("br",{}),(0,Yx.jsx)("div",{className:"prose",children:e.description})]})})}},{key:"genTitle",value:function(e){return(0,Yx.jsx)("table",{className:"item",children:(0,Yx.jsx)("tbody",{children:(0,Yx.jsxs)("tr",{children:[(0,Yx.jsx)("td",{className:"itemtitledesc",children:e.name}),(0,Yx.jsx)("td",{className:"itemtitlemnem",children:e.mnemonic}),(0,Yx.jsx)("td",{className:"itemtitleext",children:e.extensions.join()})]})})})}},{key:"matchEach",value:function(e){return this.includes(e)}},{key:"matchAny",value:function(e,i){var t=document.getElementById("all-extensions");if(!t)return!0;if(0==e.length)return t.checked;if(e.length>0&&0==i.length)return!1;for(var _=0;_=i||t<0||m&&e-d>=a}function w(){var e=b();if(E(e))return h(e);r=setTimeout(w,function(e){var t=i-(e-l);return m?f(t,a-(e-d)):t}(e))}function h(e){return r=void 0,v&&_?c(e):(_=s=void 0,n)}function x(){var e=b(),t=E(e);if(_=arguments,s=this,l=e,t){if(void 0===r)return function(e){return d=e,r=setTimeout(w,i),o?c(e):n}(l);if(m)return r=setTimeout(w,i),c(l)}return void 0===r&&(r=setTimeout(w,i)),n}return i=g(i)||0,p(t)&&(o=!!t.leading,a=(m="maxWait"in t)?u(g(t.maxWait)||0,i):a,v="trailing"in t?!!t.trailing:v),x.cancel=function(){void 0!==r&&clearTimeout(r),d=0,_=l=s=r=void 0},x.flush=function(){return void 0===r?n:h(b())},x}},725:function(e){"use strict";var i=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var i={},t=0;t<10;t++)i["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(i).map((function(e){return i[e]})).join(""))return!1;var _={};return"abcdefghijklmnopqrst".split("").forEach((function(e){_[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},_)).join("")}catch(s){return!1}}()?Object.assign:function(e,s){for(var a,n,r=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function m(e,i){for(var t=0;ti}return!1}(i,t,s,_)&&(t=null),_||null===s?function(e){return!!c.call(f,e)||!c.call(u,e)&&(v.test(e)?f[e]=!0:(u[e]=!0,!1))}(i)&&(null===t?e.removeAttribute(i):e.setAttribute(i,""+t)):s.mustUseProperty?e[s.propertyName]=null===t?3!==s.type&&"":t:(i=s.attributeName,_=s.attributeNamespace,null===t?e.removeAttribute(i):(t=3===(s=s.type)||4===s&&!0===t?"":""+t,_?e.setAttributeNS(_,i,t):e.setAttribute(i,t))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var i=e.replace(g,E);p[i]=new b(i,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){p[e]=new b(e,1,!1,e.toLowerCase(),null,!1,!1)})),p.xlinkHref=new b("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){p[e]=new b(e,1,!1,e.toLowerCase(),null,!0,!0)}));var h=_.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,z=60106,L=60107,M=60108,R=60114,S=60109,D=60110,y=60112,V=60113,A=60120,T=60115,W=60116,U=60121,I=60128,B=60129,O=60130,F=60131;if("function"===typeof Symbol&&Symbol.for){var q=Symbol.for;x=q("react.element"),z=q("react.portal"),L=q("react.fragment"),M=q("react.strict_mode"),R=q("react.profiler"),S=q("react.provider"),D=q("react.context"),y=q("react.forward_ref"),V=q("react.suspense"),A=q("react.suspense_list"),T=q("react.memo"),W=q("react.lazy"),U=q("react.block"),q("react.scope"),I=q("react.opaque.id"),B=q("react.debug_trace_mode"),O=q("react.offscreen"),F=q("react.legacy_hidden")}var X,C="function"===typeof Symbol&&Symbol.iterator;function H(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=C&&e[C]||e["@@iterator"])?e:null}function k(e){if(void 0===X)try{throw Error()}catch(t){var i=t.stack.trim().match(/\n( *(at )?)/);X=i&&i[1]||""}return"\n"+X+e}var N=!1;function Z(e,i){if(!e||N)return"";N=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(i)if(i=function(){throw Error()},Object.defineProperty(i.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(i,[])}catch(l){var _=l}Reflect.construct(e,[],i)}else{try{i.call()}catch(l){_=l}e.call(i.prototype)}else{try{throw Error()}catch(l){_=l}e()}}catch(l){if(l&&_&&"string"===typeof l.stack){for(var s=l.stack.split("\n"),a=_.stack.split("\n"),n=s.length-1,r=a.length-1;1<=n&&0<=r&&s[n]!==a[r];)r--;for(;1<=n&&0<=r;n--,r--)if(s[n]!==a[r]){if(1!==n||1!==r)do{if(n--,0>--r||s[n]!==a[r])return"\n"+s[n].replace(" at new "," at ")}while(1<=n&&0<=r);break}}}finally{N=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?k(e):""}function Y(e){switch(e.tag){case 5:return k(e.type);case 16:return k("Lazy");case 13:return k("Suspense");case 19:return k("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 22:return e=Z(e.type._render,!1);case 1:return e=Z(e.type,!0);default:return""}}function P(e){if(null==e)return null;if("function"===typeof e)return e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case L:return"Fragment";case z:return"Portal";case R:return"Profiler";case M:return"StrictMode";case V:return"Suspense";case A:return"SuspenseList"}if("object"===typeof e)switch(e.$$typeof){case D:return(e.displayName||"Context")+".Consumer";case S:return(e._context.displayName||"Context")+".Provider";case y:var i=e.render;return i=i.displayName||i.name||"",e.displayName||(""!==i?"ForwardRef("+i+")":"ForwardRef");case T:return P(e.type);case U:return P(e._render);case W:i=e._payload,e=e._init;try{return P(e(i))}catch(t){}}return null}function j(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function K(e){var i=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===i||"radio"===i)}function G(e){e._valueTracker||(e._valueTracker=function(e){var i=K(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,i),_=""+e[i];if(!e.hasOwnProperty(i)&&"undefined"!==typeof t&&"function"===typeof t.get&&"function"===typeof t.set){var s=t.get,a=t.set;return Object.defineProperty(e,i,{configurable:!0,get:function(){return s.call(this)},set:function(e){_=""+e,a.call(this,e)}}),Object.defineProperty(e,i,{enumerable:t.enumerable}),{getValue:function(){return _},setValue:function(e){_=""+e},stopTracking:function(){e._valueTracker=null,delete e[i]}}}}(e))}function Q(e){if(!e)return!1;var i=e._valueTracker;if(!i)return!0;var t=i.getValue(),_="";return e&&(_=K(e)?e.checked?"true":"false":e.value),(e=_)!==t&&(i.setValue(e),!0)}function J(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(i){return e.body}}function $(e,i){var t=i.checked;return s({},i,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function ee(e,i){var t=null==i.defaultValue?"":i.defaultValue,_=null!=i.checked?i.checked:i.defaultChecked;t=j(null!=i.value?i.value:t),e._wrapperState={initialChecked:_,initialValue:t,controlled:"checkbox"===i.type||"radio"===i.type?null!=i.checked:null!=i.value}}function ie(e,i){null!=(i=i.checked)&&w(e,"checked",i,!1)}function te(e,i){ie(e,i);var t=j(i.value),_=i.type;if(null!=t)"number"===_?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===_||"reset"===_)return void e.removeAttribute("value");i.hasOwnProperty("value")?se(e,i.type,t):i.hasOwnProperty("defaultValue")&&se(e,i.type,j(i.defaultValue)),null==i.checked&&null!=i.defaultChecked&&(e.defaultChecked=!!i.defaultChecked)}function _e(e,i,t){if(i.hasOwnProperty("value")||i.hasOwnProperty("defaultValue")){var _=i.type;if(!("submit"!==_&&"reset"!==_||void 0!==i.value&&null!==i.value))return;i=""+e._wrapperState.initialValue,t||i===e.value||(e.value=i),e.defaultValue=i}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function se(e,i,t){"number"===i&&J(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}function ae(e,i){return e=s({children:void 0},i),(i=function(e){var i="";return _.Children.forEach(e,(function(e){null!=e&&(i+=e)})),i}(i.children))&&(e.children=i),e}function ne(e,i,t,_){if(e=e.options,i){i={};for(var s=0;s=t.length))throw Error(n(93));t=t[0]}i=t}null==i&&(i=""),t=i}e._wrapperState={initialValue:j(t)}}function de(e,i){var t=j(i.value),_=j(i.defaultValue);null!=t&&((t=""+t)!==e.value&&(e.value=t),null==i.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=_&&(e.defaultValue=""+_)}function oe(e){var i=e.textContent;i===e._wrapperState.initialValue&&""!==i&&null!==i&&(e.value=i)}var me={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function ve(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ce(e,i){return null==e||"http://www.w3.org/1999/xhtml"===e?ve(i):"http://www.w3.org/2000/svg"===e&&"foreignObject"===i?"http://www.w3.org/1999/xhtml":e}var ue,fe,be=(fe=function(e,i){if(e.namespaceURI!==me.svg||"innerHTML"in e)e.innerHTML=i;else{for((ue=ue||document.createElement("div")).innerHTML="",i=ue.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;i.firstChild;)e.appendChild(i.firstChild)}},"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,i,t,_){MSApp.execUnsafeLocalFunction((function(){return fe(e,i)}))}:fe);function pe(e,i){if(i){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=i)}e.textContent=i}var ge={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ee=["Webkit","ms","Moz","O"];function we(e,i,t){return null==i||"boolean"===typeof i||""===i?"":t||"number"!==typeof i||0===i||ge.hasOwnProperty(e)&&ge[e]?(""+i).trim():i+"px"}function he(e,i){for(var t in e=e.style,i)if(i.hasOwnProperty(t)){var _=0===t.indexOf("--"),s=we(t,i[t],_);"float"===t&&(t="cssFloat"),_?e.setProperty(t,s):e[t]=s}}Object.keys(ge).forEach((function(e){Ee.forEach((function(i){i=i+e.charAt(0).toUpperCase()+e.substring(1),ge[i]=ge[e]}))}));var xe=s({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ze(e,i){if(i){if(xe[e]&&(null!=i.children||null!=i.dangerouslySetInnerHTML))throw Error(n(137,e));if(null!=i.dangerouslySetInnerHTML){if(null!=i.children)throw Error(n(60));if("object"!==typeof i.dangerouslySetInnerHTML||!("__html"in i.dangerouslySetInnerHTML))throw Error(n(61))}if(null!=i.style&&"object"!==typeof i.style)throw Error(n(62))}}function Le(e,i){if(-1===e.indexOf("-"))return"string"===typeof i.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Me(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Re=null,Se=null,De=null;function ye(e){if(e=is(e)){if("function"!==typeof Re)throw Error(n(280));var i=e.stateNode;i&&(i=_s(i),Re(e.stateNode,e.type,i))}}function Ve(e){Se?De?De.push(e):De=[e]:Se=e}function Ae(){if(Se){var e=Se,i=De;if(De=Se=null,ye(e),i)for(e=0;e(_=31-ki(_))?0:1<<_)<<1)-1,0!==i&&i!==_&&0===(i&n)){if(Bi(i),s<=Ii)return i;Ii=s}if(0!==(i=e.entangledLanes))for(e=e.entanglements,i&=_;0t;t++)i.push(e);return i}function Hi(e,i,t){e.pendingLanes|=i;var _=i-1;e.suspendedLanes&=_,e.pingedLanes&=_,(e=e.eventTimes)[i=31-ki(i)]=t}var ki=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ni(e)/Zi|0)|0},Ni=Math.log,Zi=Math.LN2;var Yi=a.unstable_UserBlockingPriority,Pi=a.unstable_runWithPriority,ji=!0;function Ki(e,i,t,_){Be||Ue();var s=Qi,a=Be;Be=!0;try{We(s,e,i,t,_)}finally{(Be=a)||Fe()}}function Gi(e,i,t,_){Pi(Yi,Qi.bind(null,e,i,t,_))}function Qi(e,i,t,_){var s;if(ji)if((s=0===(4&i))&&0=Bt),qt=String.fromCharCode(32),Xt=!1;function Ct(e,i){switch(e){case"keyup":return-1!==Ut.indexOf(i.keyCode);case"keydown":return 229!==i.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ht(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var kt=!1;var Nt={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zt(e){var i=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===i?!!Nt[e.type]:"textarea"===i}function Yt(e,i,t,_){Ve(_),0<(i=I_(i,"onChange")).length&&(t=new mt("onChange","change",null,t,_),e.push({event:t,listeners:i}))}var Pt=null,jt=null;function Kt(e){S_(e,0)}function Gt(e){if(Q(ts(e)))return e}function Qt(e,i){if("change"===e)return i}var Jt=!1;if(m){var $t;if(m){var e_="oninput"in document;if(!e_){var i_=document.createElement("div");i_.setAttribute("oninput","return;"),e_="function"===typeof i_.oninput}$t=e_}else $t=!1;Jt=$t&&(!document.documentMode||9=i)return{node:_,offset:i-e};e=t}e:{for(;_;){if(_.nextSibling){_=_.nextSibling;break e}_=_.parentNode}_=void 0}_=m_(_)}}function c_(e,i){return!(!e||!i)&&(e===i||(!e||3!==e.nodeType)&&(i&&3===i.nodeType?c_(e,i.parentNode):"contains"in e?e.contains(i):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(i))))}function u_(){for(var e=window,i=J();i instanceof e.HTMLIFrameElement;){try{var t="string"===typeof i.contentWindow.location.href}catch(_){t=!1}if(!t)break;i=J((e=i.contentWindow).document)}return i}function f_(e){var i=e&&e.nodeName&&e.nodeName.toLowerCase();return i&&("input"===i&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===i||"true"===e.contentEditable)}var b_=m&&"documentMode"in document&&11>=document.documentMode,p_=null,g_=null,E_=null,w_=!1;function h_(e,i,t){var _=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;w_||null==p_||p_!==J(_)||("selectionStart"in(_=p_)&&f_(_)?_={start:_.selectionStart,end:_.selectionEnd}:_={anchorNode:(_=(_.ownerDocument&&_.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:_.anchorOffset,focusNode:_.focusNode,focusOffset:_.focusOffset},E_&&o_(E_,_)||(E_=_,0<(_=I_(g_,"onSelect")).length&&(i=new mt("onSelect","select",null,i,t),e.push({event:i,listeners:_}),i.target=p_)))}Ui("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Ui("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Ui(Wi,2);for(var x_="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),z_=0;z_ns||(e.current=as[ns],as[ns]=null,ns--)}function ds(e,i){ns++,as[ns]=e.current,e.current=i}var os={},ms=rs(os),vs=rs(!1),cs=os;function us(e,i){var t=e.type.contextTypes;if(!t)return os;var _=e.stateNode;if(_&&_.__reactInternalMemoizedUnmaskedChildContext===i)return _.__reactInternalMemoizedMaskedChildContext;var s,a={};for(s in t)a[s]=i[s];return _&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=i,e.__reactInternalMemoizedMaskedChildContext=a),a}function fs(e){return null!==(e=e.childContextTypes)&&void 0!==e}function bs(){ls(vs),ls(ms)}function ps(e,i,t){if(ms.current!==os)throw Error(n(168));ds(ms,i),ds(vs,t)}function gs(e,i,t){var _=e.stateNode;if(e=i.childContextTypes,"function"!==typeof _.getChildContext)return t;for(var a in _=_.getChildContext())if(!(a in e))throw Error(n(108,P(i)||"Unknown",a));return s({},t,_)}function Es(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||os,cs=ms.current,ds(ms,e),ds(vs,vs.current),!0}function ws(e,i,t){var _=e.stateNode;if(!_)throw Error(n(169));t?(e=gs(e,i,cs),_.__reactInternalMemoizedMergedChildContext=e,ls(vs),ls(ms),ds(ms,e)):ls(vs),ds(vs,t)}var hs=null,xs=null,zs=a.unstable_runWithPriority,Ls=a.unstable_scheduleCallback,Ms=a.unstable_cancelCallback,Rs=a.unstable_shouldYield,Ss=a.unstable_requestPaint,Ds=a.unstable_now,ys=a.unstable_getCurrentPriorityLevel,Vs=a.unstable_ImmediatePriority,As=a.unstable_UserBlockingPriority,Ts=a.unstable_NormalPriority,Ws=a.unstable_LowPriority,Us=a.unstable_IdlePriority,Is={},Bs=void 0!==Ss?Ss:function(){},Os=null,Fs=null,qs=!1,Xs=Ds(),Cs=1e4>Xs?Ds:function(){return Ds()-Xs};function Hs(){switch(ys()){case Vs:return 99;case As:return 98;case Ts:return 97;case Ws:return 96;case Us:return 95;default:throw Error(n(332))}}function ks(e){switch(e){case 99:return Vs;case 98:return As;case 97:return Ts;case 96:return Ws;case 95:return Us;default:throw Error(n(332))}}function Ns(e,i){return e=ks(e),zs(e,i)}function Zs(e,i,t){return e=ks(e),Ls(e,i,t)}function Ys(){if(null!==Fs){var e=Fs;Fs=null,Ms(e)}Ps()}function Ps(){if(!qs&&null!==Os){qs=!0;var e=0;try{var i=Os;Ns(99,(function(){for(;ef?(b=m,m=null):b=m.sibling;var p=c(s,m,r[f],l);if(null===p){null===m&&(m=b);break}e&&m&&null===p.alternate&&i(s,m),n=a(p,n,f),null===o?d=p:o.sibling=p,o=p,m=b}if(f===r.length)return t(s,m),d;if(null===m){for(;fb?(p=f,f=null):p=f.sibling;var E=c(s,f,g.value,d);if(null===E){null===f&&(f=p);break}e&&f&&null===E.alternate&&i(s,f),r=a(E,r,b),null===m?o=E:m.sibling=E,m=E,f=p}if(g.done)return t(s,f),o;if(null===f){for(;!g.done;b++,g=l.next())null!==(g=v(s,g.value,d))&&(r=a(g,r,b),null===m?o=g:m.sibling=g,m=g);return o}for(f=_(s,f);!g.done;b++,g=l.next())null!==(g=u(f,s,b,g.value,d))&&(e&&null!==g.alternate&&f.delete(null===g.key?b:g.key),r=a(g,r,b),null===m?o=g:m.sibling=g,m=g);return e&&f.forEach((function(e){return i(s,e)})),o}return function(e,_,a,l){var d="object"===typeof a&&null!==a&&a.type===L&&null===a.key;d&&(a=a.props.children);var o="object"===typeof a&&null!==a;if(o)switch(a.$$typeof){case x:e:{for(o=a.key,d=_;null!==d;){if(d.key===o){if(7===d.tag){if(a.type===L){t(e,d.sibling),(_=s(d,a.props.children)).return=e,e=_;break e}}else if(d.elementType===a.type){t(e,d.sibling),(_=s(d,a.props)).ref=ha(e,d,a),_.return=e,e=_;break e}t(e,d);break}i(e,d),d=d.sibling}a.type===L?((_=Pl(a.props.children,e.mode,l,a.key)).return=e,e=_):((l=Yl(a.type,a.key,a.props,null,e.mode,l)).ref=ha(e,_,a),l.return=e,e=l)}return r(e);case z:e:{for(d=a.key;null!==_;){if(_.key===d){if(4===_.tag&&_.stateNode.containerInfo===a.containerInfo&&_.stateNode.implementation===a.implementation){t(e,_.sibling),(_=s(_,a.children||[])).return=e,e=_;break e}t(e,_);break}i(e,_),_=_.sibling}(_=Gl(a,e.mode,l)).return=e,e=_}return r(e)}if("string"===typeof a||"number"===typeof a)return a=""+a,null!==_&&6===_.tag?(t(e,_.sibling),(_=s(_,a)).return=e,e=_):(t(e,_),(_=Kl(a,e.mode,l)).return=e,e=_),r(e);if(wa(a))return f(e,_,a,l);if(H(a))return b(e,_,a,l);if(o&&xa(e,a),"undefined"===typeof a&&!d)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(n(152,P(e.type)||"Component"))}return t(e,_)}}var La=za(!0),Ma=za(!1),Ra={},Sa=rs(Ra),Da=rs(Ra),ya=rs(Ra);function Va(e){if(e===Ra)throw Error(n(174));return e}function Aa(e,i){switch(ds(ya,i),ds(Da,e),ds(Sa,Ra),e=i.nodeType){case 9:case 11:i=(i=i.documentElement)?i.namespaceURI:ce(null,"");break;default:i=ce(i=(e=8===e?i.parentNode:i).namespaceURI||null,e=e.tagName)}ls(Sa),ds(Sa,i)}function Ta(){ls(Sa),ls(Da),ls(ya)}function Wa(e){Va(ya.current);var i=Va(Sa.current),t=ce(i,e.type);i!==t&&(ds(Da,e),ds(Sa,t))}function Ua(e){Da.current===e&&(ls(Sa),ls(Da))}var Ia=rs(0);function Ba(e){for(var i=e;null!==i;){if(13===i.tag){var t=i.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||"$?"===t.data||"$!"===t.data))return i}else if(19===i.tag&&void 0!==i.memoizedProps.revealOrder){if(0!==(64&i.flags))return i}else if(null!==i.child){i.child.return=i,i=i.child;continue}if(i===e)break;for(;null===i.sibling;){if(null===i.return||i.return===e)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var Oa=null,Fa=null,qa=!1;function Xa(e,i){var t=kl(5,null,null,0);t.elementType="DELETED",t.type="DELETED",t.stateNode=i,t.return=e,t.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=t,e.lastEffect=t):e.firstEffect=e.lastEffect=t}function Ca(e,i){switch(e.tag){case 5:var t=e.type;return null!==(i=1!==i.nodeType||t.toLowerCase()!==i.nodeName.toLowerCase()?null:i)&&(e.stateNode=i,!0);case 6:return null!==(i=""===e.pendingProps||3!==i.nodeType?null:i)&&(e.stateNode=i,!0);default:return!1}}function Ha(e){if(qa){var i=Fa;if(i){var t=i;if(!Ca(e,i)){if(!(i=Y_(t.nextSibling))||!Ca(e,i))return e.flags=-1025&e.flags|2,qa=!1,void(Oa=e);Xa(Oa,t)}Oa=e,Fa=Y_(i.firstChild)}else e.flags=-1025&e.flags|2,qa=!1,Oa=e}}function ka(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Oa=e}function Na(e){if(e!==Oa)return!1;if(!qa)return ka(e),qa=!0,!1;var i=e.type;if(5!==e.tag||"head"!==i&&"body"!==i&&!H_(i,e.memoizedProps))for(i=Fa;i;)Xa(e,i),i=Y_(i.nextSibling);if(ka(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(n(317));e:{for(e=e.nextSibling,i=0;e;){if(8===e.nodeType){var t=e.data;if("/$"===t){if(0===i){Fa=Y_(e.nextSibling);break e}i--}else"$"!==t&&"$!"!==t&&"$?"!==t||i++}e=e.nextSibling}Fa=null}}else Fa=Oa?Y_(e.stateNode.nextSibling):null;return!0}function Za(){Fa=Oa=null,qa=!1}var Ya=[];function Pa(){for(var e=0;ea))throw Error(n(301));a+=1,$a=Ja=null,i.updateQueue=null,ja.current=Wn,e=t(_,s)}while(tn)}if(ja.current=Vn,i=null!==Ja&&null!==Ja.next,Ga=0,$a=Ja=Qa=null,en=!1,i)throw Error(n(300));return e}function nn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===$a?Qa.memoizedState=$a=e:$a=$a.next=e,$a}function rn(){if(null===Ja){var e=Qa.alternate;e=null!==e?e.memoizedState:null}else e=Ja.next;var i=null===$a?Qa.memoizedState:$a.next;if(null!==i)$a=i,Ja=e;else{if(null===e)throw Error(n(310));e={memoizedState:(Ja=e).memoizedState,baseState:Ja.baseState,baseQueue:Ja.baseQueue,queue:Ja.queue,next:null},null===$a?Qa.memoizedState=$a=e:$a=$a.next=e}return $a}function ln(e,i){return"function"===typeof i?i(e):i}function dn(e){var i=rn(),t=i.queue;if(null===t)throw Error(n(311));t.lastRenderedReducer=e;var _=Ja,s=_.baseQueue,a=t.pending;if(null!==a){if(null!==s){var r=s.next;s.next=a.next,a.next=r}_.baseQueue=s=a,t.pending=null}if(null!==s){s=s.next,_=_.baseState;var l=r=a=null,d=s;do{var o=d.lane;if((Ga&o)===o)null!==l&&(l=l.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),_=d.eagerReducer===e?d.eagerState:e(_,d.action);else{var m={lane:o,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};null===l?(r=l=m,a=_):l=l.next=m,Qa.lanes|=o,Xr|=o}d=d.next}while(null!==d&&d!==s);null===l?a=_:l.next=r,l_(_,i.memoizedState)||(In=!0),i.memoizedState=_,i.baseState=a,i.baseQueue=l,t.lastRenderedState=_}return[i.memoizedState,t.dispatch]}function on(e){var i=rn(),t=i.queue;if(null===t)throw Error(n(311));t.lastRenderedReducer=e;var _=t.dispatch,s=t.pending,a=i.memoizedState;if(null!==s){t.pending=null;var r=s=s.next;do{a=e(a,r.action),r=r.next}while(r!==s);l_(a,i.memoizedState)||(In=!0),i.memoizedState=a,null===i.baseQueue&&(i.baseState=a),t.lastRenderedState=a}return[a,_]}function mn(e,i,t){var _=i._getVersion;_=_(i._source);var s=i._workInProgressVersionPrimary;if(null!==s?e=s===_:(e=e.mutableReadLanes,(e=(Ga&e)===e)&&(i._workInProgressVersionPrimary=_,Ya.push(i))),e)return t(i._source);throw Ya.push(i),Error(n(350))}function vn(e,i,t,_){var s=Tr;if(null===s)throw Error(n(349));var a=i._getVersion,r=a(i._source),l=ja.current,d=l.useState((function(){return mn(s,i,t)})),o=d[1],m=d[0];d=$a;var v=e.memoizedState,c=v.refs,u=c.getSnapshot,f=v.source;v=v.subscribe;var b=Qa;return e.memoizedState={refs:c,source:i,subscribe:_},l.useEffect((function(){c.getSnapshot=t,c.setSnapshot=o;var e=a(i._source);if(!l_(r,e)){e=t(i._source),l_(m,e)||(o(e),e=vl(b),s.mutableReadLanes|=e&s.pendingLanes),e=s.mutableReadLanes,s.entangledLanes|=e;for(var _=s.entanglements,n=e;0t?98:t,(function(){e(!0)})),Ns(97<\/script>",e=e.removeChild(e.firstChild)):"string"===typeof _.is?e=d.createElement(t,{is:_.is}):(e=d.createElement(t),"select"===t&&(d=e,_.multiple?d.multiple=!0:_.size&&(d.size=_.size))):e=d.createElementNS(e,t),e[G_]=i,e[Q_]=_,Yn(e,i,!1,!1),i.stateNode=e,d=Le(t,_),t){case"dialog":D_("cancel",e),D_("close",e),a=_;break;case"iframe":case"object":case"embed":D_("load",e),a=_;break;case"video":case"audio":for(a=0;aZr&&(i.flags|=64,r=!0,ar(_,!1),i.lanes=33554432)}else{if(!r)if(null!==(e=Ba(d))){if(i.flags|=64,r=!0,null!==(t=e.updateQueue)&&(i.updateQueue=t,i.flags|=4),ar(_,!0),null===_.tail&&"hidden"===_.tailMode&&!d.alternate&&!qa)return null!==(i=i.lastEffect=_.lastEffect)&&(i.nextEffect=null),null}else 2*Cs()-_.renderingStartTime>Zr&&1073741824!==t&&(i.flags|=64,r=!0,ar(_,!1),i.lanes=33554432);_.isBackwards?(d.sibling=i.child,i.child=d):(null!==(t=_.last)?t.sibling=d:i.child=d,_.last=d)}return null!==_.tail?(t=_.tail,_.rendering=t,_.tail=t.sibling,_.lastEffect=i.lastEffect,_.renderingStartTime=Cs(),t.sibling=null,i=Ia.current,ds(Ia,r?1&i|2:1&i),t):null;case 23:case 24:return xl(),null!==e&&null!==e.memoizedState!==(null!==i.memoizedState)&&"unstable-defer-without-hiding"!==_.mode&&(i.flags|=4),null}throw Error(n(156,i.tag))}function rr(e){switch(e.tag){case 1:fs(e.type)&&bs();var i=e.flags;return 4096&i?(e.flags=-4097&i|64,e):null;case 3:if(Ta(),ls(vs),ls(ms),Pa(),0!==(64&(i=e.flags)))throw Error(n(285));return e.flags=-4097&i|64,e;case 5:return Ua(e),null;case 13:return ls(Ia),4096&(i=e.flags)?(e.flags=-4097&i|64,e):null;case 19:return ls(Ia),null;case 4:return Ta(),null;case 10:return ia(e),null;case 23:case 24:return xl(),null;default:return null}}function lr(e,i){try{var t="",_=i;do{t+=Y(_),_=_.return}while(_);var s=t}catch(a){s="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:i,stack:s}}function dr(e,i){try{console.error(i.value)}catch(t){setTimeout((function(){throw t}))}}Yn=function(e,i){for(var t=i.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===i)break;for(;null===t.sibling;){if(null===t.return||t.return===i)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Pn=function(){},jn=function(e,i,t,_){var a=e.memoizedProps;if(a!==_){e=i.stateNode,Va(Sa.current);var n,r=null;switch(t){case"input":a=$(e,a),_=$(e,_),r=[];break;case"option":a=ae(e,a),_=ae(e,_),r=[];break;case"select":a=s({},a,{value:void 0}),_=s({},_,{value:void 0}),r=[];break;case"textarea":a=re(e,a),_=re(e,_),r=[];break;default:"function"!==typeof a.onClick&&"function"===typeof _.onClick&&(e.onclick=F_)}for(m in ze(t,_),t=null,a)if(!_.hasOwnProperty(m)&&a.hasOwnProperty(m)&&null!=a[m])if("style"===m){var d=a[m];for(n in d)d.hasOwnProperty(n)&&(t||(t={}),t[n]="")}else"dangerouslySetInnerHTML"!==m&&"children"!==m&&"suppressContentEditableWarning"!==m&&"suppressHydrationWarning"!==m&&"autoFocus"!==m&&(l.hasOwnProperty(m)?r||(r=[]):(r=r||[]).push(m,null));for(m in _){var o=_[m];if(d=null!=a?a[m]:void 0,_.hasOwnProperty(m)&&o!==d&&(null!=o||null!=d))if("style"===m)if(d){for(n in d)!d.hasOwnProperty(n)||o&&o.hasOwnProperty(n)||(t||(t={}),t[n]="");for(n in o)o.hasOwnProperty(n)&&d[n]!==o[n]&&(t||(t={}),t[n]=o[n])}else t||(r||(r=[]),r.push(m,t)),t=o;else"dangerouslySetInnerHTML"===m?(o=o?o.__html:void 0,d=d?d.__html:void 0,null!=o&&d!==o&&(r=r||[]).push(m,o)):"children"===m?"string"!==typeof o&&"number"!==typeof o||(r=r||[]).push(m,""+o):"suppressContentEditableWarning"!==m&&"suppressHydrationWarning"!==m&&(l.hasOwnProperty(m)?(null!=o&&"onScroll"===m&&D_("scroll",e),r||d===o||(r=[])):"object"===typeof o&&null!==o&&o.$$typeof===I?o.toString():(r=r||[]).push(m,o))}t&&(r=r||[]).push("style",t);var m=r;(i.updateQueue=m)&&(i.flags|=4)}},Kn=function(e,i,t,_){t!==_&&(i.flags|=4)};var or="function"===typeof WeakMap?WeakMap:Map;function mr(e,i,t){(t=la(-1,t)).tag=3,t.payload={element:null};var _=i.value;return t.callback=function(){Kr||(Kr=!0,Gr=_),dr(0,i)},t}function vr(e,i,t){(t=la(-1,t)).tag=3;var _=e.type.getDerivedStateFromError;if("function"===typeof _){var s=i.value;t.payload=function(){return dr(0,i),_(s)}}var a=e.stateNode;return null!==a&&"function"===typeof a.componentDidCatch&&(t.callback=function(){"function"!==typeof _&&(null===Qr?Qr=new Set([this]):Qr.add(this),dr(0,i));var e=i.stack;this.componentDidCatch(i.value,{componentStack:null!==e?e:""})}),t}var cr="function"===typeof WeakSet?WeakSet:Set;function ur(e){var i=e.ref;if(null!==i)if("function"===typeof i)try{i(null)}catch(t){ql(e,t)}else i.current=null}function fr(e,i){switch(i.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&i.flags&&null!==e){var t=e.memoizedProps,_=e.memoizedState;i=(e=i.stateNode).getSnapshotBeforeUpdate(i.elementType===i.type?t:Ks(i.type,t),_),e.__reactInternalSnapshotBeforeUpdate=i}return;case 3:return void(256&i.flags&&Z_(i.stateNode.containerInfo))}throw Error(n(163))}function br(e,i,t){switch(t.tag){case 0:case 11:case 15:case 22:if(null!==(i=null!==(i=t.updateQueue)?i.lastEffect:null)){e=i=i.next;do{if(3===(3&e.tag)){var _=e.create;e.destroy=_()}e=e.next}while(e!==i)}if(null!==(i=null!==(i=t.updateQueue)?i.lastEffect:null)){e=i=i.next;do{var s=e;_=s.next,0!==(4&(s=s.tag))&&0!==(1&s)&&(Bl(t,e),Il(t,e)),e=_}while(e!==i)}return;case 1:return e=t.stateNode,4&t.flags&&(null===i?e.componentDidMount():(_=t.elementType===t.type?i.memoizedProps:Ks(t.type,i.memoizedProps),e.componentDidUpdate(_,i.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(i=t.updateQueue)&&va(t,i,e));case 3:if(null!==(i=t.updateQueue)){if(e=null,null!==t.child)switch(t.child.tag){case 5:case 1:e=t.child.stateNode}va(t,i,e)}return;case 5:return e=t.stateNode,void(null===i&&4&t.flags&&C_(t.type,t.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===t.memoizedState&&(t=t.alternate,null!==t&&(t=t.memoizedState,null!==t&&(t=t.dehydrated,null!==t&&hi(t)))))}throw Error(n(163))}function pr(e,i){for(var t=e;;){if(5===t.tag){var _=t.stateNode;if(i)"function"===typeof(_=_.style).setProperty?_.setProperty("display","none","important"):_.display="none";else{_=t.stateNode;var s=t.memoizedProps.style;s=void 0!==s&&null!==s&&s.hasOwnProperty("display")?s.display:null,_.style.display=we("display",s)}}else if(6===t.tag)t.stateNode.nodeValue=i?"":t.memoizedProps;else if((23!==t.tag&&24!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return}t.sibling.return=t.return,t=t.sibling}}function gr(e,i){if(xs&&"function"===typeof xs.onCommitFiberUnmount)try{xs.onCommitFiberUnmount(hs,i)}catch(a){}switch(i.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=i.updateQueue)&&null!==(e=e.lastEffect)){var t=e=e.next;do{var _=t,s=_.destroy;if(_=_.tag,void 0!==s)if(0!==(4&_))Bl(i,t);else{_=i;try{s()}catch(a){ql(_,a)}}t=t.next}while(t!==e)}break;case 1:if(ur(i),"function"===typeof(e=i.stateNode).componentWillUnmount)try{e.props=i.memoizedProps,e.state=i.memoizedState,e.componentWillUnmount()}catch(a){ql(i,a)}break;case 5:ur(i);break;case 4:Lr(e,i)}}function Er(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function wr(e){return 5===e.tag||3===e.tag||4===e.tag}function hr(e){e:{for(var i=e.return;null!==i;){if(wr(i))break e;i=i.return}throw Error(n(160))}var t=i;switch(i=t.stateNode,t.tag){case 5:var _=!1;break;case 3:case 4:i=i.containerInfo,_=!0;break;default:throw Error(n(161))}16&t.flags&&(pe(i,""),t.flags&=-17);e:i:for(t=e;;){for(;null===t.sibling;){if(null===t.return||wr(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.flags)continue i;if(null===t.child||4===t.tag)continue i;t.child.return=t,t=t.child}if(!(2&t.flags)){t=t.stateNode;break e}}_?xr(e,t,i):zr(e,t,i)}function xr(e,i,t){var _=e.tag,s=5===_||6===_;if(s)e=s?e.stateNode:e.stateNode.instance,i?8===t.nodeType?t.parentNode.insertBefore(e,i):t.insertBefore(e,i):(8===t.nodeType?(i=t.parentNode).insertBefore(e,t):(i=t).appendChild(e),null!==(t=t._reactRootContainer)&&void 0!==t||null!==i.onclick||(i.onclick=F_));else if(4!==_&&null!==(e=e.child))for(xr(e,i,t),e=e.sibling;null!==e;)xr(e,i,t),e=e.sibling}function zr(e,i,t){var _=e.tag,s=5===_||6===_;if(s)e=s?e.stateNode:e.stateNode.instance,i?t.insertBefore(e,i):t.appendChild(e);else if(4!==_&&null!==(e=e.child))for(zr(e,i,t),e=e.sibling;null!==e;)zr(e,i,t),e=e.sibling}function Lr(e,i){for(var t,_,s=i,a=!1;;){if(!a){a=s.return;e:for(;;){if(null===a)throw Error(n(160));switch(t=a.stateNode,a.tag){case 5:_=!1;break e;case 3:case 4:t=t.containerInfo,_=!0;break e}a=a.return}a=!0}if(5===s.tag||6===s.tag){e:for(var r=e,l=s,d=l;;)if(gr(r,d),null!==d.child&&4!==d.tag)d.child.return=d,d=d.child;else{if(d===l)break e;for(;null===d.sibling;){if(null===d.return||d.return===l)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}_?(r=t,l=s.stateNode,8===r.nodeType?r.parentNode.removeChild(l):r.removeChild(l)):t.removeChild(s.stateNode)}else if(4===s.tag){if(null!==s.child){t=s.stateNode.containerInfo,_=!0,s.child.return=s,s=s.child;continue}}else if(gr(e,s),null!==s.child){s.child.return=s,s=s.child;continue}if(s===i)break;for(;null===s.sibling;){if(null===s.return||s.return===i)return;4===(s=s.return).tag&&(a=!1)}s.sibling.return=s.return,s=s.sibling}}function Mr(e,i){switch(i.tag){case 0:case 11:case 14:case 15:case 22:var t=i.updateQueue;if(null!==(t=null!==t?t.lastEffect:null)){var _=t=t.next;do{3===(3&_.tag)&&(e=_.destroy,_.destroy=void 0,void 0!==e&&e()),_=_.next}while(_!==t)}return;case 1:case 12:case 17:return;case 5:if(null!=(t=i.stateNode)){_=i.memoizedProps;var s=null!==e?e.memoizedProps:_;e=i.type;var a=i.updateQueue;if(i.updateQueue=null,null!==a){for(t[Q_]=_,"input"===e&&"radio"===_.type&&null!=_.name&&ie(t,_),Le(e,s),i=Le(e,_),s=0;ss&&(s=r),t&=~a}if(t=s,10<(t=(120>(t=Cs()-t)?120:480>t?480:1080>t?1080:1920>t?1920:3e3>t?3e3:4320>t?4320:1960*Dr(t/1960))-t)){e.timeoutHandle=k_(Al.bind(null,e),t);break}Al(e);break;default:throw Error(n(329))}}return fl(e,Cs()),e.callbackNode===i?bl.bind(null,e):null}function pl(e,i){for(i&=~Hr,i&=~Cr,e.suspendedLanes|=i,e.pingedLanes&=~i,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Or&&(Or=2),l=lr(l,r),v=n;do{switch(v.tag){case 3:a=l,v.flags|=4096,i&=-i,v.lanes|=i,oa(v,mr(0,a,i));break e;case 1:a=l;var h=v.type,x=v.stateNode;if(0===(64&v.flags)&&("function"===typeof h.getDerivedStateFromError||null!==x&&"function"===typeof x.componentDidCatch&&(null===Qr||!Qr.has(x)))){v.flags|=4096,i&=-i,v.lanes|=i,oa(v,vr(v,a,i));break e}}v=v.return}while(null!==v)}Vl(t)}catch(z){i=z,Wr===t&&null!==t&&(Wr=t=t.return);continue}break}}function Ml(){var e=yr.current;return yr.current=Vn,null===e?Vn:e}function Rl(e,i){var t=Ar;Ar|=16;var _=Ml();for(Tr===e&&Ur===i||zl(e,i);;)try{Sl();break}catch(s){Ll(e,s)}if(ea(),Ar=t,yr.current=_,null!==Wr)throw Error(n(261));return Tr=null,Ur=0,Or}function Sl(){for(;null!==Wr;)yl(Wr)}function Dl(){for(;null!==Wr&&!Rs();)yl(Wr)}function yl(e){var i=Pr(e.alternate,e,Ir);e.memoizedProps=e.pendingProps,null===i?Vl(e):Wr=i,Vr.current=null}function Vl(e){var i=e;do{var t=i.alternate;if(e=i.return,0===(2048&i.flags)){if(null!==(t=nr(t,i,Ir)))return void(Wr=t);if(24!==(t=i).tag&&23!==t.tag||null===t.memoizedState||0!==(1073741824&Ir)||0===(4&t.mode)){for(var _=0,s=t.child;null!==s;)_|=s.lanes|s.childLanes,s=s.sibling;t.childLanes=_}null!==e&&0===(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=i.firstEffect),null!==i.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=i.firstEffect),e.lastEffect=i.lastEffect),1r&&(l=r,r=x,x=l),l=v_(E,x),a=v_(E,r),l&&a&&(1!==h.rangeCount||h.anchorNode!==l.node||h.anchorOffset!==l.offset||h.focusNode!==a.node||h.focusOffset!==a.offset)&&((w=w.createRange()).setStart(l.node,l.offset),h.removeAllRanges(),x>r?(h.addRange(w),h.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),h.addRange(w))))),w=[];for(h=E;h=h.parentNode;)1===h.nodeType&&w.push({element:h,left:h.scrollLeft,top:h.scrollTop});for("function"===typeof E.focus&&E.focus(),E=0;ECs()-Nr?zl(e,0):Hr|=t),fl(e,i)}function Cl(e,i){var t=e.stateNode;null!==t&&t.delete(i),0===(i=0)&&(0===(2&(i=e.mode))?i=1:0===(4&i)?i=99===Hs()?1:2:(0===rl&&(rl=qr),0===(i=Xi(62914560&~rl))&&(i=4194304))),t=ml(),null!==(e=ul(e,i))&&(Hi(e,i,t),fl(e,t))}function Hl(e,i,t,_){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=i,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=_,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function kl(e,i,t,_){return new Hl(e,i,t,_)}function Nl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Zl(e,i){var t=e.alternate;return null===t?((t=kl(e.tag,i,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=i,t.type=e.type,t.flags=0,t.nextEffect=null,t.firstEffect=null,t.lastEffect=null),t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,i=e.dependencies,t.dependencies=null===i?null:{lanes:i.lanes,firstContext:i.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Yl(e,i,t,_,s,a){var r=2;if(_=e,"function"===typeof e)Nl(e)&&(r=1);else if("string"===typeof e)r=5;else e:switch(e){case L:return Pl(t.children,s,a,i);case B:r=8,s|=16;break;case M:r=8,s|=1;break;case R:return(e=kl(12,t,i,8|s)).elementType=R,e.type=R,e.lanes=a,e;case V:return(e=kl(13,t,i,s)).type=V,e.elementType=V,e.lanes=a,e;case A:return(e=kl(19,t,i,s)).elementType=A,e.lanes=a,e;case O:return jl(t,s,a,i);case F:return(e=kl(24,t,i,s)).elementType=F,e.lanes=a,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case S:r=10;break e;case D:r=9;break e;case y:r=11;break e;case T:r=14;break e;case W:r=16,_=null;break e;case U:r=22;break e}throw Error(n(130,null==e?e:typeof e,""))}return(i=kl(r,t,i,s)).elementType=e,i.type=_,i.lanes=a,i}function Pl(e,i,t,_){return(e=kl(7,e,_,i)).lanes=t,e}function jl(e,i,t,_){return(e=kl(23,e,_,i)).elementType=O,e.lanes=t,e}function Kl(e,i,t){return(e=kl(6,e,null,i)).lanes=t,e}function Gl(e,i,t){return(i=kl(4,null!==e.children?e.children:[],e.key,i)).lanes=t,i.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},i}function Ql(e,i,t){this.tag=i,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ci(0),this.expirationTimes=Ci(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ci(0),this.mutableSourceEagerHydrationData=null}function Jl(e,i,t,_){var s=i.current,a=ml(),r=vl(s);e:if(t){i:{if(Ke(t=t._reactInternals)!==t||1!==t.tag)throw Error(n(170));var l=t;do{switch(l.tag){case 3:l=l.stateNode.context;break i;case 1:if(fs(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break i}}l=l.return}while(null!==l);throw Error(n(171))}if(1===t.tag){var d=t.type;if(fs(d)){t=gs(t,d,l);break e}}t=l}else t=os;return null===i.context?i.context=t:i.pendingContext=t,(i=la(a,r)).payload={element:e},null!==(_=void 0===_?null:_)&&(i.callback=_),da(s,i),cl(s,r,a),r}function $l(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function ed(e,i){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t=E},a=function(){},i.unstable_forceFrameRate=function(e){0>e||125>>1,s=e[_];if(!(void 0!==s&&0M(n,t))void 0!==l&&0>M(l,n)?(e[_]=l,e[r]=t,_=r):(e[_]=n,e[a]=t,_=a);else{if(!(void 0!==l&&0>M(l,t)))break e;e[_]=l,e[r]=t,_=r}}}return i}return null}function M(e,i){var t=e.sortIndex-i.sortIndex;return 0!==t?t:e.id-i.id}var R=[],S=[],D=1,y=null,V=3,A=!1,T=!1,W=!1;function U(e){for(var i=z(S);null!==i;){if(null===i.callback)L(S);else{if(!(i.startTime<=e))break;L(S),i.sortIndex=i.expirationTime,x(R,i)}i=z(S)}}function I(e){if(W=!1,U(e),!T)if(null!==z(R))T=!0,t(B);else{var i=z(S);null!==i&&_(I,i.startTime-e)}}function B(e,t){T=!1,W&&(W=!1,s()),A=!0;var a=V;try{for(U(t),y=z(R);null!==y&&(!(y.expirationTime>t)||e&&!i.unstable_shouldYield());){var n=y.callback;if("function"===typeof n){y.callback=null,V=y.priorityLevel;var r=n(y.expirationTime<=t);t=i.unstable_now(),"function"===typeof r?y.callback=r:y===z(R)&&L(R),U(t)}else L(R);y=z(R)}if(null!==y)var l=!0;else{var d=z(S);null!==d&&_(I,d.startTime-t),l=!1}return l}finally{y=null,V=a,A=!1}}var O=a;i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(e){e.callback=null},i.unstable_continueExecution=function(){T||A||(T=!0,t(B))},i.unstable_getCurrentPriorityLevel=function(){return V},i.unstable_getFirstCallbackNode=function(){return z(R)},i.unstable_next=function(e){switch(V){case 1:case 2:case 3:var i=3;break;default:i=V}var t=V;V=i;try{return e()}finally{V=t}},i.unstable_pauseExecution=function(){},i.unstable_requestPaint=O,i.unstable_runWithPriority=function(e,i){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=V;V=e;try{return i()}finally{V=t}},i.unstable_scheduleCallback=function(e,a,n){var r=i.unstable_now();switch("object"===typeof n&&null!==n?n="number"===typeof(n=n.delay)&&0r?(e.sortIndex=n,x(S,e),null===z(R)&&e===z(S)&&(W?s():W=!0,_(I,n-r))):(e.sortIndex=l,x(R,e),T||A||(T=!0,t(B))),e},i.unstable_wrapCallback=function(e){var i=V;return function(){var t=V;V=i;try{return e.apply(this,arguments)}finally{V=t}}}},296:function(e,i,t){"use strict";e.exports=t(813)},458:function(e){e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var i=document.activeElement,t=[],_=0;_e.length)&&(i=e.length);for(var t=0,_=new Array(i);t=e.length?{done:!0}:{done:!1,value:e[_++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,n=!0,r=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return n=e.done,e},e:function(e){r=!0,a=e},f:function(){try{n||null==t.return||t.return()}finally{if(r)throw a}}}}(e.flags);try{for(t.s();!(i=t.n()).done;){var _=b(i.value,2),s=_[0],a=_[1];this.flags.has(s)||this.flags.set(s,a)}}catch(n){t.e(n)}finally{t.f()}}},{key:"enabled",value:function(e){return this.checkForFlag(e),this.flags.get(e)}}],t&&f(i.prototype,t),_&&f(i,_),Object.defineProperty(i,"prototype",{writable:!1}),e}(),w=z(),h=0;h=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function O(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function F(e){var i=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,_=U(e);if(i){var s=U(this).constructor;t=Reflect.construct(_,arguments,s)}else t=_.apply(this,arguments);return function(e,i){if(i&&("object"===typeof i||"function"===typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return O(e)}(this,t)}}function q(e,i){return function(e){if(Array.isArray(e))return e}(e)||function(e,i){var t=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==t)return;var _,s,a=[],n=!0,r=!1;try{for(t=t.call(e);!(n=(_=t.next()).done)&&(a.push(_.value),!i||a.length!==i);n=!0);}catch(l){r=!0,s=l}finally{try{n||null==t.return||t.return()}finally{if(r)throw s}}return a}(e,i)||X(e,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(e,i){if(e){if("string"===typeof e)return C(e,i);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?C(e,i):void 0}}function C(e,i){(null==i||i>e.length)&&(i=e.length);for(var t=0,_=new Array(i);t=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}K.propTypes={align:P().oneOf(["start","end"]),children:P().node,className:P().string,disabled:P().bool,size:L("enable-v11-release")?P().oneOf(["sm","md","lg"]):P().oneOf(["sm","md","lg","xl"])};var ee=["width","height","viewBox"],ie=["tabindex"],te={focusable:"false",preserveAspectRatio:"xMidYMid meet"};function _e(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.width,t=e.height,_=e.viewBox,s=void 0===_?"0 0 ".concat(i," ").concat(t):_,a=$(e,ee),n=a.tabindex,r=$(a,ie),l=Q(Q(Q({},te),r),{},{width:i,height:t,viewBox:s});return l["aria-label"]||l["aria-labelledby"]||l.title?(l.role="img",void 0!==n&&null!==n&&(l.focusable="true",l.tabindex=n)):l["aria-hidden"]=!0,l}function se(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(e);i&&(_=_.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),t.push.apply(t,_)}return t}function ae(e){for(var i=1;i=0||(s[t]=e[t]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(_=0;_=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var le=["className","children","tabIndex"],de=["tabindex"],oe=i.forwardRef((function(e,t){var _=e.className,s=e.children,a=e.tabIndex,n=_e(ae(ae({},re(e,le)),{},{tabindex:a})),r=n.tabindex,l=re(n,de);return _&&(l.className=_),void 0!==r&&null!==r&&(l.tabIndex=r),t&&(l.ref=t),i.createElement("svg",l,s)}));oe.displayName="Icon",oe.propTypes={"aria-hidden":P().string,"aria-label":P().string,"aria-labelledby":P().string,children:P().node,className:P().string,height:P().oneOfType([P().number,P().string]),preserveAspectRatio:P().string,tabIndex:P().string,viewBox:P().string,width:P().oneOfType([P().number,P().string]),xmlns:P().string},oe.defaultProps={xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid meet"};var me,ve,ce,ue,fe,be,pe,ge,Ee,we,he,xe,ze,Le,Me,Re,Se,De,ye,Ve,Ae,Te,We,Ue,Ie,Be,Oe,Fe,qe,Xe,Ce,He,ke,Ne,Ze,Ye,Pe,je,Ke,Ge,Qe,Je,$e,ei,ii,ti,_i,si,ai,ni,ri,li,di,oi,mi,vi,ci,ui,fi,bi,pi,gi,Ei,wi,hi,xi,zi,Li,Mi,Ri,Si,Di,yi,Vi,Ai,Ti,Wi,Ui,Ii,Bi,Oi,Fi,qi,Xi,Ci,Hi,ki,Ni,Zi,Yi,Pi,ji,Ki,Gi,Qi,Ji,$i,et,it,tt,_t,st,at,nt,rt,lt,dt,ot,mt,vt,ct,ut,ft,bt,pt,gt,Et,wt,ht,xt,zt,Lt,Mt,Rt,St,Dt,yt,Vt,At,Tt,Wt,Ut,It,Bt,Ot,Ft,qt,Xt,Ct,Ht,kt,Nt,Zt,Yt,Pt,jt,Kt,Gt,Qt,Jt,$t,e_,i_,t_,__,s_,a_,n_,r_,l_,d_,o_,m_,v_,c_,u_,f_,b_,p_,g_,E_,w_,h_,x_,z_,L_,M_,R_,S_,D_,y_,V_,A_,T_,W_,U_,I_,B_,O_,F_,q_,X_,C_,H_,k_,N_,Z_,Y_,P_,j_,K_,G_,Q_,J_,$_,es,is,ts,_s,ss,as,ns,rs,ls,ds,os,ms,vs,cs,us,fs,bs,ps,gs,Es,ws,hs,xs,zs,Ls,Ms,Rs,Ss,Ds,ys,Vs,As,Ts,Ws,Us,Is,Bs,Os,Fs,qs,Xs,Cs,Hs,ks,Ns,Zs,Ys,Ps,js,Ks,Gs,Qs,Js,$s,ea,ia,ta,_a,sa,aa,na,ra,la,da={size:P().oneOfType([P().number,P().string])},oa=["children","size"],ma=["children","size"],va=["children","size"],ca=["children","size"],ua=["children","size"],fa=["children","size"],ba=["children","size"],pa=["children","size"],ga=["children","size"],Ea=["children","size"],wa=["children","size"],ha=["children","size"],xa=["children","size"],za=["children","size"],La=["children","size"],Ma=["children","size"],Ra=["children","size"],Sa=["children","size"],Da=["children","size"],ya=["children","size"],Va=["children","size"],Aa=["children","size"],Ta=["children","size"],Wa=["children","size"],Ua=["children","size"],Ia=["children","size"],Ba=["children","size"],Oa=["children","size"],Fa=["children","size"],qa=["children","size"],Xa=["children","size"],Ca=["children","size"],Ha=["children","size"],ka=["children","size"],Na=["children","size"],Za=["children","size"],Ya=["children","size"],Pa=["children","size"],ja=["children","size"],Ka=["children","size"],Ga=["children","size"],Qa=["children","size"],Ja=["children","size"],$a=["children","size"],en=["children","size"],tn=["children","size"],_n=["children","size"],sn=["children","size"],an=["children","size"],nn=["children","size"],rn=["children","size"],ln=["children","size"],dn=["children","size"],on=["children","size"],mn=["children","size"],vn=["children","size"],cn=["children","size"],un=["children","size"],fn=["children","size"],bn=["children","size"],pn=["children","size"],gn=["children","size"],En=["children","size"],wn=["children","size"],hn=["children","size"],xn=["children","size"],zn=["children","size"],Ln=["children","size"],Mn=["children","size"],Rn=["children","size"],Sn=["children","size"],Dn=["children","size"],yn=["children","size"],Vn=["children","size"],An=["children","size"],Tn=["children","size"],Wn=["children","size"],Un=["children","size"],In=["children","size"],Bn=["children","size"],On=["children","size"],Fn=["children","size"],qn=["children","size"],Xn=["children","size"],Cn=["children","size"],Hn=["children","size"],kn=["children","size"],Nn=["children","size"],Zn=["children","size"],Yn=["children","size"],Pn=["children","size"],jn=["children","size"],Kn=["children","size"],Gn=["children","size"],Qn=["children","size"],Jn=["children","size"],$n=["children","size"],er=["children","size"],ir=["children","size"],tr=["children","size"],_r=["children","size"],sr=["children","size"],ar=["children","size"],nr=["children","size"],rr=["children","size"],lr=["children","size"],dr=["children","size"],or=["children","size"],mr=["children","size"],vr=["children","size"],cr=["children","size"],ur=["children","size"],fr=["children","size"],br=["children","size"],pr=["children","size"],gr=["children","size"],Er=["children","size"],wr=["children","size"],hr=["children","size"],xr=["children","size"],zr=["children","size"],Lr=["children","size"],Mr=["children","size"],Rr=["children","size"],Sr=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,oa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),me||(me=i.createElement("path",{d:"M28 24H14V16H28zM16 22H26V18H16zM26 12H8V4H26zM10 10H24V6H10z"})),ve||(ve=i.createElement("path",{d:"M30,30H4a2.0023,2.0023,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ma);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ce||(ce=i.createElement("path",{d:"M4,28V26H26V16H4V14H18V4H4V2H2V28a2,2,0,0,0,2,2H30V28ZM24,18v6H4V22H20V20H4V18ZM16,6v6H4V10h8V8H4V6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,va);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ue||(ue=i.createElement("path",{d:"M4,28V25H26V17H4V13H18V5H4V2H2V28a2,2,0,0,0,2,2H30V28Zm20-5H14V19H24ZM16,11H10V7h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ca);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),fe||(fe=i.createElement("path",{d:"M28 17H30V25H28zM20 5H22V13H20z"})),be||(be=i.createElement("path",{d:"M4,2H2V28a2,2,0,0,0,2,2H30V28H4V25H26V17H4V13H18V5H4ZM24,19v4H4V19ZM16,7v4H4V7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ua);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pe||(pe=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),ge||(ge=i.createElement("path",{d:"M10 16a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4 4 4 0 00-4-4zM21 6a4 4 0 11-4 4 4 4 0 014-4m0-2a6 6 0 106 6 6 6 0 00-6-6zM24.5 21A1.5 1.5 0 1123 22.5 1.5 1.5 0 0124.5 21m0-2A3.5 3.5 0 1028 22.5 3.5 3.5 0 0024.5 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ee||(Ee=i.createElement("path",{d:"M27.5322,17.1724A8.99,8.99,0,1,0,13.6074,5.88,5.9969,5.9969,0,1,0,5.051,13.2217a6.9967,6.9967,0,1,0,7.9942,11.4844A5.9981,5.9981,0,0,0,25,24c0-.1216-.011-.24-.0181-.3594a3.4873,3.4873,0,1,0,2.55-6.4682ZM21,4a7,7,0,1,1-7,7A7.0078,7.0078,0,0,1,21,4ZM8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4ZM19,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,19,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ba);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),we||(we=i.createElement("path",{d:"M30 22H16V21H14v1H2v6H14v1h2V28H30zM4 26V24H14v2zm24 0H16V24H28zM30 13H24V12H22v1H2v6H22v1h2V19h6zM4 17V15H22v2zm24 0H24V15h4zM30 4H10V3H8V4H2v6H8v1h2V10H30zM4 8V6H8V8zM28 8H10V6H28z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),he||(he=i.createElement("path",{d:"M26 10H24V6H22v4H20V22h2v4h2V22h2zM24 20H22V12h2zM14 8H12V4H10V8H8V18h2v4h2V18h2zm-2 8H10V10h2z"})),xe||(xe=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ga);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ze||(ze=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),Le||(Le=i.createElement("path",{d:"M10 16H12V26H10zM7 22H9V26H7zM26 8H28V26H26zM23 14H25V26H23z"})),Me||(Me=i.createElement("path",{d:"M15 12H17V26H15z",transform:"rotate(-180 16 19)"})),Re||(Re=i.createElement("path",{d:"M18 18H20V26H18z",transform:"rotate(-180 19 22)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ea);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Se||(Se=i.createElement("path",{d:"M27,28V6H19V28H15V14H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V16h4Zm12,0H21V8h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),De||(De=i.createElement("path",{d:"M28 22H20V4h8zm-6-2h4V6H22zM16 24H8V10h8zm-6-2h4V12H10z"})),ye||(ye=i.createElement("path",{d:"M30,30H4a2.0021,2.0021,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ha);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ve||(Ve=i.createElement("path",{d:"M27 28V6H19V28H15V14H7V28H4V2H2V28a2 2 0 002 2H30V28zM13 28H9V16h4zm12 0H21V8h4zM19 2H27V4H19z"})),Ae||(Ae=i.createElement("path",{d:"M7 10H15V12H7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Te||(Te=i.createElement("path",{d:"M27,28V16H19V28H15V12H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V14h4Zm12,0H21V18h4Z"})),We||(We=i.createElement("path",{d:"M22.7856,14a1.9877,1.9877,0,0,1-1.1787-.3865L11.2041,5.987,8.2419,10,6.6374,8.8065l2.9812-4a1.9978,1.9978,0,0,1,2.749-.446l10.4214,7.64,3.6045-4.8613L28,8.3306l-3.6045,4.8611A2.0014,2.0014,0,0,1,22.7856,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,za);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ue||(Ue=i.createElement("path",{d:"M27,28V16H19V28H15V12H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,14v6H9V14Zm12,4v6H21V18Z"})),Ie||(Ie=i.createElement("path",{d:"M22.7856,14a1.9877,1.9877,0,0,1-1.1787-.3865L11.2041,5.987,8.2419,10,6.6374,8.8065l2.9812-4a1.9978,1.9978,0,0,1,2.749-.446l10.4214,7.64,3.6045-4.8613L28,8.3306l-3.6045,4.8611A2.0014,2.0014,0,0,1,22.7856,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,La);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Be||(Be=i.createElement("path",{d:"M29.707,19.293l-3-3a.9994.9994,0,0,0-1.414,0L16,25.5859V30h4.4141l9.2929-9.293A.9994.9994,0,0,0,29.707,19.293ZM19.5859,28H18V26.4141l5-5L24.5859,23ZM26,21.5859,24.4141,20,26,18.4141,27.5859,20Z"})),Oe||(Oe=i.createElement("path",{d:"M17 15H21V17H17z",transform:"rotate(-90 19 16)"})),Fe||(Fe=i.createElement("path",{d:"M12 14H18V16H12z",transform:"rotate(-90 15 15)"})),qe||(qe=i.createElement("path",{d:"M6 12H16V14H6z",transform:"rotate(-90 11 13)"})),Xe||(Xe=i.createElement("path",{d:"M12,30H6a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,6,2H22a2.0021,2.0021,0,0,1,2,2V14H22V4H6V28h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ma);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ce||(Ce=i.createElement("path",{d:"M22,28V12H18V8h2V6H14V8h2v4H12V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM14,14h2v4H14Zm6,14H14V20h6Zm0-10H18V14h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ra);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),He||(He=i.createElement("path",{d:"M14 10V8H8v2h2v4.1836a2.983 2.983 0 000 5.6328V24H8v2h6V24H12V19.8164a2.983 2.983 0 000-5.6328V10zM26 6V4H20V6h2V8.1836a2.983 2.983 0 000 5.6328V18H20v2h6V18H24V13.8164a2.983 2.983 0 000-5.6328V6z"})),ke||(ke=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ne||(Ne=i.createElement("path",{d:"M25.672 6.207H29.915V8.206H25.672z",transform:"rotate(-45.02 27.793 7.207)"})),Ze||(Ze=i.createElement("path",{d:"M16 20.5L11 15.539 12.59 13.969 16 17.349 23.41 10 25 11.579 16 20.5z"})),Ye||(Ye=i.createElement("path",{d:"M4,28V25.4131L10.4141,19,9,17.585l-5,5V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Da);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pe||(Pe=i.createElement("path",{d:"M15 8L12 8 12 6 10 6 10 20 7 20 7 22 10 22 10 24 12 24 12 10 15 10 15 8zM27 10L24 10 24 6 22 6 22 18 19 18 19 20 22 20 22 24 24 24 24 12 27 12 27 10z"})),je||(je=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ya);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ke||(Ke=i.createElement("path",{d:"M6,16c2.9727,0,4.2324-2.251,5.3447-4.2373C12.4741,9.7441,13.45,8,16,8s3.5259,1.7441,4.6553,3.7627C21.7676,13.749,23.0273,16,26,16h4V14H26c-1.7129,0-2.4834-1.2207-3.5991-3.2144C21.2075,8.6543,19.7231,6,16,6s-5.2075,2.6543-6.4009,4.7856C8.4834,12.7793,7.7129,14,6,14H4V2H2V28a2,2,0,0,0,2,2H30V28H28V22H26v6H21.9992L22,20H20v8H16V16H14V28H9.9992L10,20H8v8H4V16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Va);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ge||(Ge=i.createElement("path",{d:"M4.67,28l6.39-12,7.3,6.49a2,2,0,0,0,1.7.47,2,2,0,0,0,1.42-1.07L27,10.9,25.18,10,19.69,21l-7.3-6.49A2,2,0,0,0,10.71,14a2,2,0,0,0-1.42,1L4,25V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Aa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qe||(Qe=i.createElement("path",{d:"M10.06,17.88A4.25,4.25,0,0,0,11,18a4,4,0,0,0,2.23-.68l3.22,2.87a3.88,3.88,0,0,0-.2,3.17A4,4,0,1,0,22.62,19l2.54-5.09a3.78,3.78,0,0,0,2.91-.53A4,4,0,1,0,23.38,13l-2.54,5.09A3.86,3.86,0,0,0,20,18a4,4,0,0,0-2.23.68l-3.22-2.87a3.88,3.88,0,0,0,.2-3.17A4,4,0,1,0,8.3,16.93L4,25V2H2V28a2,2,0,0,0,2,2H30V28H4.67ZM26,8a2,2,0,1,1-2,2A2,2,0,0,1,26,8ZM22,22a2,2,0,1,1-2-2A2,2,0,0,1,22,22ZM11,12a2,2,0,1,1-2,2A2,2,0,0,1,11,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ta);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Je||(Je=i.createElement("path",{d:"M13,15c1.4854,0,2.5544,1.4966,3.6863,3.0811C17.9983,19.918,19.4854,22,22,22c5.6709,0,7.78-10.79,8-12l-1.9678-.3584C27.55,12.2827,25.3938,20,22,20c-1.4854,0-2.5544-1.4966-3.6863-3.0811C17.0017,15.082,15.5146,13,13,13c-4.186,0-7.4448,7.4043-9,11.7617V2H2V28a2.0025,2.0025,0,0,0,2,2H30V28H5.0439C6.5544,22.8574,9.9634,15,13,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$e||($e=i.createElement("path",{d:"M27,3H5A2.0025,2.0025,0,0,0,3,5V27a2.0025,2.0025,0,0,0,2,2H27a2.0025,2.0025,0,0,0,2-2V5A2.0025,2.0025,0,0,0,27,3Zm0,7H21V5h6ZM19,8H13V5h6Zm0,2v8H13V10ZM11,22H5V12h6Zm2-2h6v7H13Zm8-8h6v4H21ZM11,5v5H5V5ZM5,24h6v3H5Zm16,3V18h6v9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ua);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ei||(ei=i.createElement("path",{d:"M8 6H10V8H8zM12 6H14V8H12zM20 6H22V8H20zM24 6H26V8H24zM28 6H30V8H28z"})),ii||(ii=i.createElement("path",{d:"M27.989,28l-.0271-.1631C26.5105,19.0742,24.0662,9.0894,18,8.0889V6H16V8.085c-6.084.978-8.533,10.9775-9.9863,19.7519L5.9866,28H4V8H6V6H4V2H2V28a2,2,0,0,0,2,2H30V28ZM8.0151,28c2.024-12.1084,4.959-18,8.9727-18s6.9487,5.8916,8.9726,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ia);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ti||(ti=i.createElement("path",{d:"M16 22H18V24H16z",transform:"rotate(-90 17 23)"})),_i||(_i=i.createElement("path",{d:"M18,28V26H16v2H4V2H2V28a2,2,0,0,0,2,2H30V28Z"})),si||(si=i.createElement("path",{d:"M26.0532,19.6787A3.44,3.44,0,0,1,23,22c-2.17,0-3.3115-3.333-4.52-6.8623-.3557-1.0386-.7239-2.1094-1.1382-3.1377H18V10H16.4221C15.2124,7.7148,13.5811,6,11,6,7.3218,6,6.1016,9.5332,6.0513,9.6836l1.8955.6377A3.44,3.44,0,0,1,11,8c2.92,0,4.2764,3.958,5.5874,7.7861.2544.7422.5105,1.4893.7813,2.2139H16v2h2.2019c1.0828,2.2886,2.4959,4,4.7981,4,3.6782,0,4.8984-3.5332,4.9487-3.6836Z"})),ai||(ai=i.createElement("path",{d:"M16 6H18V8H16z",transform:"rotate(-90 17 7)"})),ni||(ni=i.createElement("path",{d:"M16 2H18V4H16z",transform:"rotate(-90 17 3)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ba);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ri||(ri=i.createElement("path",{d:"M4,28V26H6V24H4V2H2V28a2,2,0,0,0,2,2H30V28Z"})),li||(li=i.createElement("path",{d:"M8 24H10V26H8zM12 24H14V26H12zM20 24H22V26H20zM24 24H26V26H24zM28 24H30V26H28z"})),di||(di=i.createElement("path",{d:"M27.9463,4.3281,25.9727,4C23.9487,16.1084,21.0137,22,17,22S10.0513,16.1084,8.0271,4l-1.9734.3281C7.51,13.0566,9.9631,22.93,16,23.9131V26h2V23.9131C24.0371,22.93,26.4907,13.0566,27.9463,4.3281Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),oi||(oi=i.createElement("path",{d:"M4.5859,28l7.1783-5.998L19.7578,23.94a2.021,2.021,0,0,0,1.314-.1206L28,20.5811l-.8479-1.8121-6.9163,3.229L12.2422,20.06a2.0033,2.0033,0,0,0-1.74.3838L4,25.8818V20.49l7.7642-6.4877L19.7578,15.94a2.021,2.021,0,0,0,1.314-.1206l6.9287-3.2383-.8467-1.812-6.918,3.2285L12.2422,12.06a2.0049,2.0049,0,0,0-1.74.3838L4,17.8818V12.49L11.7642,6.002,19.7578,7.94a2.021,2.021,0,0,0,1.314-.1206L28,4.5859l-.8457-1.8115L20.2358,5.998,12.2422,4.06a2.0033,2.0033,0,0,0-1.74.3838L4,9.8818V2H2V28a2,2,0,0,0,2,2H30V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mi||(mi=i.createElement("path",{d:"M28 22H30V30H28zM24 18H26V30H24zM20 26H22V30H20zM9 16a7 7 0 107 7A7.0078 7.0078 0 009 16zm4.8989 6H10V18.1011A5.0145 5.0145 0 0113.8989 22zM9 28a5 5 0 01-1-9.8989V22a2 2 0 002 2h3.8989A5.0081 5.0081 0 019 28zM22.5352 12l4-6H30V4H25.4648l-4 6H18V2H16V14a2 2 0 002 2H30V14H18V12z"})),vi||(vi=i.createElement("circle",{cx:"11",cy:"7",r:"1"})),ci||(ci=i.createElement("circle",{cx:"9",cy:"11",r:"1"})),ui||(ui=i.createElement("circle",{cx:"7",cy:"5",r:"1"})),fi||(fi=i.createElement("circle",{cx:"5",cy:"9",r:"1"})),bi||(bi=i.createElement("circle",{cx:"3",cy:"13",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pi||(pi=i.createElement("path",{d:"M26,14a2,2,0,0,0,2-2V6a2,2,0,0,0-2-2H20a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h2v4.1A5,5,0,0,0,18.1,22H14V20a2,2,0,0,0-2-2H10V13.9a5,5,0,1,0-2,0V18H6a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V24h4.1A5,5,0,1,0,24,18.1V14ZM6,9a3,3,0,1,1,3,3A3,3,0,0,1,6,9Zm6,17H6V20h6Zm14-3a3,3,0,1,1-3-3A3,3,0,0,1,26,23ZM20,6h6v6H20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gi||(gi=i.createElement("path",{d:"M28,2V5.3071l-6,2.25V2H20V7.5229l-8-3.2V2H10V4.4458l-6,3.75V2H2V30H4V27.6182l6-3V30h2V24.3442l8,2.4V30h2V26.5542l6-3.75V30h2V2Zm0,5.4429V12.5L22,17V9.6929ZM20,9.6768v7.5571l-8-4.8V6.4771ZM10,6.8042v5.7417l-6,5.25V10.5542ZM4,25.3818V20.4541l6-5.25v7.1777Zm8-3.1259v-7.49l8,4.8v5.0894Zm10,1.94V19.5L28,15v5.4458Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ca);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ei||(Ei=i.createElement("path",{d:"M16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4ZM26,15H17V6.05A10,10,0,0,1,26,15ZM15.42,26A10,10,0,0,1,15,6.05v9a2,2,0,0,0,2,2h9A10,10,0,0,1,15.42,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ha);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wi||(wi=i.createElement("path",{d:"M30,30H4a2.0023,2.0023,0,0,1-2-2V2H4V28H30Z"})),hi||(hi=i.createElement("circle",{cx:"9",cy:"6",r:"3"})),xi||(xi=i.createElement("circle",{cx:"9",cy:"22",r:"3"})),zi||(zi=i.createElement("circle",{cx:"18",cy:"14",r:"3"})),Li||(Li=i.createElement("path",{d:"M9,17a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,9,17Zm0-4a1,1,0,1,0,1,1A1.001,1.001,0,0,0,9,13Z"})),Mi||(Mi=i.createElement("circle",{cx:"27",cy:"6",r:"3"})),Ri||(Ri=i.createElement("circle",{cx:"27",cy:"22",r:"3"})),Si||(Si=i.createElement("path",{d:"M27 17a3 3 0 113-3A3.0033 3.0033 0 0127 17zm0-4a1 1 0 101 1A1.001 1.001 0 0027 13zM18 26a3 3 0 113-3A3.0033 3.0033 0 0118 26zm0-4a1 1 0 101 1A1.001 1.001 0 0018 22zM18 8a3 3 0 113-3A3.0033 3.0033 0 0118 8zm0-4a1 1 0 101 1A1.001 1.001 0 0018 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ka);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Di||(Di=i.createElement("path",{d:"M30,22H17V20h9V14H17V12h5V6H17V2H15V6H10v6h5v2H6v6h9v2H2v6H15v2h2V28H30ZM20,8v2H17V8Zm-8,2V8h3v2Zm12,6v2H17V16ZM8,18V16h7v2ZM4,26V24H15v2Zm24,0H17V24H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Na);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yi||(yi=i.createElement("path",{d:"M16,2,2,13,8,30H24l6-17Zm2.5818,19.2651-5.9861,1.3306-1.4226-7.8252,4.91-4.209,5.4416,4.0816Zm.1977,2.0054L21.3264,28H10.6736l1.7912-3.3267ZM9.59,13.4937,5.74,12.605,15,5.3291V8.8569ZM17,8.75V5.3291l9.26,7.2759-3.15.727ZM4.6143,14.3979l4.6535,1.0738,1.4844,8.164-1.738,3.2281ZM22.9858,26.8638l-2.5766-4.7852,3.0063-6.7646,3.97-.9161Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Za);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vi||(Vi=i.createElement("path",{d:"M16,30A14.0158,14.0158,0,0,1,2,16H4A12,12,0,1,0,16,4V2a14,14,0,0,1,0,28Z"})),Ai||(Ai=i.createElement("path",{d:"M16,26A10.0115,10.0115,0,0,1,6,16H8a8,8,0,1,0,8-8V6a10,10,0,0,1,0,20Z"})),Ti||(Ti=i.createElement("path",{d:"M16,22a6.0069,6.0069,0,0,1-6-6h2a4,4,0,1,0,4-4V10a6,6,0,0,1,0,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ya);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wi||(Wi=i.createElement("path",{d:"M26,6a3.9963,3.9963,0,0,0-3.8579,3H17.9305A7.9964,7.9964,0,1,0,9,17.9307v4.2114a4,4,0,1,0,2,0V17.9307a7.951,7.951,0,0,0,3.8976-1.6192l3.6693,3.67A3.9529,3.9529,0,0,0,18,22a4,4,0,1,0,4-4,3.9521,3.9521,0,0,0-2.019.5669l-3.6694-3.6694A7.9493,7.9493,0,0,0,17.9305,11h4.2116A3.9934,3.9934,0,1,0,26,6ZM12,26a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,12,26ZM10,16a6,6,0,1,1,6-6A6.0066,6.0066,0,0,1,10,16Zm14,6a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,24,22Zm2-10a2,2,0,1,1,2-2A2.0023,2.0023,0,0,1,26,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ui||(Ui=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14.0158,14.0158,0,0,0,16,2ZM27.9493,15.001H21.91a5.9825,5.9825,0,0,0-9.3806-3.8853l-4.27-4.27a11.9783,11.9783,0,0,1,19.69,8.1548ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20ZM4,16A11.937,11.937,0,0,1,6.8455,8.26l4.27,4.2695A5.9836,5.9836,0,0,0,15,21.9106v6.04A12.0105,12.0105,0,0,1,4,16ZM17,27.95v-6.04A6.0069,6.0069,0,0,0,21.91,17h6.04A12.0082,12.0082,0,0,1,17,27.95Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ja);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ii||(Ii=i.createElement("path",{d:"M12.4326,20.0171l8.0376,4.68a1.958,1.958,0,0,0,1.0508.3012,2.2412,2.2412,0,0,0,.4888-.0556l7.2532-1.9769A1,1,0,0,0,30,22.0007V7.996A1,1,0,0,0,28.74,7.0305L21.5034,8.9829l-8.0371-4.68a1.9917,1.9917,0,0,0-1.8652-.1352L4,7.4727V2H2V28a2,2,0,0,0,2,2H30V28H4V23.6577ZM28,21.2344l-6.4966,1.75-8.0371-4.68a1.9931,1.9931,0,0,0-1.8652-.1353L4,21.4746V16.6572l8.4326-3.6416L20.47,17.6968a1.962,1.962,0,0,0,1.0508.3008,2.2112,2.2112,0,0,0,.4888-.0557L28,16.31ZM12.4326,6.0156l8.0376,4.68a2.0091,2.0091,0,0,0,1.54.2451L28,9.3081v4.9258l-6.4966,1.7505-8.0371-4.6812a1.9917,1.9917,0,0,0-1.8652-.1352L4,14.4736V9.6562Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ka);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bi||(Bi=i.createElement("path",{d:"M30,17A15.017,15.017,0,0,0,15,2H14V8.0591A9.0122,9.0122,0,0,0,6.0591,16H4v1A11.0109,11.0109,0,0,0,14,27.9492V30h1A13.0084,13.0084,0,0,0,27.9492,18H30ZM16,4.0381A13.0217,13.0217,0,0,1,27.9619,16H16ZM14,10.08V16H8.08A7.0037,7.0037,0,0,1,14,10.08ZM6.0552,18H14v7.939A9.0134,9.0134,0,0,1,6.0552,18ZM16,27.9551V18h9.9551A11.0191,11.0191,0,0,1,16,27.9551Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ga);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Oi||(Oi=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),Fi||(Fi=i.createElement("circle",{cx:"10",cy:"22",r:"2"})),qi||(qi=i.createElement("circle",{cx:"14",cy:"15",r:"2"})),Xi||(Xi=i.createElement("circle",{cx:"22",cy:"15",r:"2"})),Ci||(Ci=i.createElement("circle",{cx:"26",cy:"6",r:"2"})),Hi||(Hi=i.createElement("circle",{cx:"14",cy:"8",r:"2"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qa);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ki||(ki=i.createElement("path",{d:"M16,2A13.919,13.919,0,0,0,7.3245,5.0327,1.9728,1.9728,0,0,0,7,5,2,2,0,0,0,5,7a1.9752,1.9752,0,0,0,.0327.3247A13.986,13.986,0,1,0,16,2Zm0,26A11.977,11.977,0,0,1,6.3589,8.8857a1.8311,1.8311,0,0,0,1.1528.04l1.4634,1.4634a8.9862,8.9862,0,0,0,11.8311,13.207,1.9916,1.9916,0,0,0,2.79-2.79,8.9294,8.9294,0,0,0,0-9.6124,1.9916,1.9916,0,0,0-2.79-2.79,8.9445,8.9445,0,0,0-10.417.5713L8.9258,7.5117a1.8294,1.8294,0,0,0-.04-1.1528A11.9925,11.9925,0,1,1,16,28Zm0-14a2,2,0,1,1-2,2A2.0025,2.0025,0,0,1,16,14Zm3.4331-.019,2.0552-2.0552a2.0443,2.0443,0,0,0,.2265.0454,6.9573,6.9573,0,0,1,0,8.0576,2.0443,2.0443,0,0,0-.2265.0454L19.4331,18.019a3.8788,3.8788,0,0,0,0-4.038Zm.5957-3.6958a1.9993,1.9993,0,0,0,.0454.2265L18.019,12.5669a3.8788,3.8788,0,0,0-4.038,0l-2.1653-2.1655a6.9522,6.9522,0,0,1,8.2131-.1162ZM12.5669,13.981A3.951,3.951,0,0,0,12,16a4.0045,4.0045,0,0,0,4,4,3.9521,3.9521,0,0,0,2.019-.5669l2.0552,2.0552a1.9993,1.9993,0,0,0-.0454.2265,6.988,6.988,0,0,1-9.6272-9.8994Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ja);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ni||(Ni=i.createElement("path",{d:"M28,28V6H20V28H16V14H8V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM22,8h4V18H22ZM10,16h4v6H10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$a);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zi||(Zi=i.createElement("path",{d:"M14,22V14h8V6h8V4H20v8H12v8H4V2H2V28a2.0025,2.0025,0,0,0,2,2H30V28H4V22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,en);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yi||(Yi=i.createElement("path",{d:"M16,2a1,1,0,0,0-1,1v7.09a5.9618,5.9618,0,0,0-2.46,1.043L7.8384,6.4311a1.4554,1.4554,0,0,0-2.087.0244A14.05,14.05,0,0,0,9.8047,28.5972a10.8482,10.8482,0,0,0,1.8989.7676,14.0982,14.0982,0,0,0,13.8443-3.1319,1.4336,1.4336,0,0,0,.0278-2.0639L20.877,19.47A5.963,5.963,0,0,0,21.91,17H29a1,1,0,0,0,1-1A14.0158,14.0158,0,0,0,16,2Zm0,10a4,4,0,1,1-4,4A4.0045,4.0045,0,0,1,16,12ZM6.83,8.251l4.2959,4.2959a5.91,5.91,0,0,0-.0113,6.9243L6.8381,23.7481A12.0168,12.0168,0,0,1,6.83,8.251Zm1.4228,16.91,4.2759-4.2759A5.9589,5.9589,0,0,0,15,21.91v6.042A11.8783,11.8783,0,0,1,8.2529,25.1612ZM17,27.9561V21.9092a5.9631,5.9631,0,0,0,2.4609-1.0273l4.2818,4.2817A11.8905,11.8905,0,0,1,17,27.9561ZM21.91,15A6.0063,6.0063,0,0,0,17,10.09V4.041A12.0208,12.0208,0,0,1,27.9585,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pi||(Pi=i.createElement("circle",{cx:"10",cy:"20",r:"2"})),ji||(ji=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Ki||(Ki=i.createElement("circle",{cx:"10",cy:"14",r:"2"})),Gi||(Gi=i.createElement("circle",{cx:"28",cy:"4",r:"2"})),Qi||(Qi=i.createElement("circle",{cx:"22",cy:"6",r:"2"})),Ji||(Ji=i.createElement("circle",{cx:"28",cy:"10",r:"2"})),$i||($i=i.createElement("circle",{cx:"20",cy:"12",r:"2"})),et||(et=i.createElement("circle",{cx:"28",cy:"22",r:"2"})),it||(it=i.createElement("circle",{cx:"26",cy:"28",r:"2"})),tt||(tt=i.createElement("circle",{cx:"20",cy:"26",r:"2"})),_t||(_t=i.createElement("circle",{cx:"22",cy:"20",r:"2"})),st||(st=i.createElement("circle",{cx:"16",cy:"4",r:"2"})),at||(at=i.createElement("circle",{cx:"4",cy:"24",r:"2"})),nt||(nt=i.createElement("circle",{cx:"4",cy:"16",r:"2"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_n);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rt||(rt=i.createElement("path",{d:"M28,2H4A2.0023,2.0023,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,12H23V4h5ZM16,4h5V14H16ZM14,4V20H4V4ZM4,22H14v6H4Zm12,6V16H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lt||(lt=i.createElement("path",{d:"M20,6a9.92,9.92,0,0,0-4,.84A9.92,9.92,0,0,0,12,6a10,10,0,0,0,0,20,9.92,9.92,0,0,0,4-.84A9.92,9.92,0,0,0,20,26,10,10,0,0,0,20,6ZM12,24A8,8,0,0,1,12,8a7.91,7.91,0,0,1,1.76.2,10,10,0,0,0,0,15.6A7.91,7.91,0,0,1,12,24Zm8-8a8,8,0,0,1-4,6.92A8,8,0,0,1,16,9.08,8,8,0,0,1,20,16Zm0,8a7.91,7.91,0,0,1-1.76-.2,10,10,0,0,0,0-15.6A7.91,7.91,0,0,1,20,8a8,8,0,0,1,0,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,an);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dt||(dt=i.createElement("path",{d:"M30,30H4a2,2,0,0,1-2-2V2H4V28H30Z"})),ot||(ot=i.createElement("path",{d:"M14.86 7.8232L13 4.7231V2H11V4.7231l-1.86 3.1A7.9986 7.9986 0 008 11.939v.122a7.9961 7.9961 0 001.14 4.1158l1.86 3.1V26h2V19.2769l1.86-3.1A7.9986 7.9986 0 0016 12.061v-.122A7.9961 7.9961 0 0014.86 7.8232zM12 6.9434l1.145 1.9087A6.0027 6.0027 0 0113.9185 11h-3.837a6.0086 6.0086 0 01.7735-2.1484zm0 10.1132l-1.145-1.9087A6.0027 6.0027 0 0110.0815 13h3.837a6.0086 6.0086 0 01-.7735 2.1484zM27.86 11.8232L26 8.7231V2H24V8.7231l-1.86 3.1A7.9986 7.9986 0 0021 15.939v.122a7.9961 7.9961 0 001.14 4.1158l1.86 3.1V26h2V23.2769l1.86-3.1A7.9986 7.9986 0 0029 16.061v-.122A7.9961 7.9961 0 0027.86 11.8232zm-2.86-.88l1.145 1.9087A6.0027 6.0027 0 0126.9185 15h-3.837a6.0086 6.0086 0 01.7735-2.1484zm0 10.1132l-1.145-1.9087A6.0027 6.0027 0 0123.0815 17h3.837a6.0086 6.0086 0 01-.7735 2.1484z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mt||(mt=i.createElement("path",{d:"M28,28V18H26V28H22V4H20V28H10V14H8V28H4V2H2V28a2.0023,2.0023,0,0,0,2,2H30V28Z"})),vt||(vt=i.createElement("path",{d:"M14 4H16V18H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ct||(ct=i.createElement("path",{d:"M30,15H16V6a2.0023,2.0023,0,0,0-2-2H6A2.0023,2.0023,0,0,0,4,6v9H2v2H16v9a2.0023,2.0023,0,0,0,2,2h8a2.0023,2.0023,0,0,0,2-2V17h2ZM6,6h8v9H6ZM26,26H18V17h8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ln);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ut||(ut=i.createElement("path",{d:"M17.74,30,16,29l4-7h6a2,2,0,0,0,2-2V8a2,2,0,0,0-2-2H6A2,2,0,0,0,4,8V20a2,2,0,0,0,2,2h9v2H6a4,4,0,0,1-4-4V8A4,4,0,0,1,6,4H26a4,4,0,0,1,4,4V20a4,4,0,0,1-4,4H21.16Z"})),ft||(ft=i.createElement("path",{d:"M8 10H24V12H8zM8 16H18V18H8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bt||(bt=i.createElement("path",{d:"M22 4L22 6 26.586 6 20 12.586 21.414 14 28 7.414 28 12 30 12 30 4 22 4zM28 16v4a1.9965 1.9965 0 01-2 2H20l-4 7 1.7358 1 3.4288-6H26a3.9992 3.9992 0 004-4V16zM4 20V8A1.9965 1.9965 0 016 6H18V4H6A3.9986 3.9986 0 002 8V20a3.9992 3.9992 0 004 4h9V22H6A1.9965 1.9965 0 014 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,on);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pt||(pt=i.createElement("path",{d:"M28 8V21h2V8a3.9986 3.9986 0 00-4-4H8.2429l2 2H26A1.9965 1.9965 0 0128 8zM30 28.5859L3.4141 2 2 3.4141 3.5039 4.918A3.9181 3.9181 0 002 8V20a3.9992 3.9992 0 004 4h6V22H6a1.9965 1.9965 0 01-2-2V8a1.9814 1.9814 0 01.9194-1.6665L20.5859 22H17l-4 7 1.7358 1 3.4288-6h4.4213l6 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gt||(gt=i.createElement("path",{d:"M15.586 10.414L19.166 14 19.166 14 15.584 17.587 17 19 22 14 17 9 15.586 10.414z"})),Et||(Et=i.createElement("path",{d:"M20.586 10.414L24.166 14 24.166 14 20.584 17.587 22 19 27 14 22 9 20.586 10.414zM10 9L11.593 12 15 12.414 12.5 14.667 13 18 10 16.125 7 18 7.5 14.667 5 12.414 8.5 12 10 9z"})),wt||(wt=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V8a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,8V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V8A3.9988,3.9988,0,0,1,6,4H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ht||(ht=i.createElement("path",{d:"M16 19a6.9908 6.9908 0 01-5.833-3.1287l1.666-1.1074a5.0007 5.0007 0 008.334 0l1.666 1.1074A6.9908 6.9908 0 0116 19zM20 8a2 2 0 102 2A1.9806 1.9806 0 0020 8zM12 8a2 2 0 102 2A1.9806 1.9806 0 0012 8z"})),xt||(xt=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V6a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,6V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V6A3.9988,3.9988,0,0,1,6,2H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zt||(zt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,un);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lt||(Lt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),Mt||(Mt=i.createElement("path",{d:"M14 21.5L9 16.54 10.59 15 14 18.35 21.41 11 23 12.58 14 21.5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rt||(Rt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM14,21.5,9,16.5427,10.5908,15,14,18.3456,21.4087,11l1.5918,1.5772Z"})),St||(St=i.createElement("path",{fill:"none",d:"M14,21.5,9,16.5427,10.5908,15,14,18.3456,21.4087,11l1.5918,1.5772Z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dt||(Dt=i.createElement("path",{d:"M10 14H22V18H10z"})),yt||(yt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vt||(Vt=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4ZM22,18H10V14H22Z"})),At||(At=i.createElement("path",{fill:"none",d:"M22,18H10V14H22Z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gn);return 20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Tt||(Tt=i.createElement("path",{d:"M8 13.2L3.6 8.8 2.7 9.7 7.1 14.1 8 15 16.5 6.5 15.6 5.6z"})),Wt||(Wt=i.createElement("path",{d:"M15.6 5.6L8 13.2 3.6 8.8 2.7 9.7 7.1 14.1 8 15 16.5 6.5 15.6 5.6z"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Ut||(Ut=i.createElement("path",{d:"M10 15.9L4.7 10.6 3.6 11.6 8.9 16.9 10 18 20.6 7.4 19.5 6.3z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),It||(It=i.createElement("path",{d:"M13 24L4 15 5.414 13.586 13 21.171 26.586 7.586 28 9 13 24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,En);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Bt||(Bt=i.createElement("path",{d:"M8,1C4.1,1,1,4.1,1,8c0,3.9,3.1,7,7,7s7-3.1,7-7C15,4.1,11.9,1,8,1z M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z"})),Ot||(Ot=i.createElement("path",{d:"M7,11L4.3,8.3l0.9-0.8L7,9.3l4-3.9l0.9,0.8L7,11z","data-icon-path":"inner-path",opacity:"0"})),_):20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Ft||(Ft=i.createElement("path",{d:"M10,1c-4.9,0-9,4.1-9,9s4.1,9,9,9s9-4,9-9S15,1,10,1z M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z"})),qt||(qt=i.createElement("path",{fill:"none",d:"M8.7,13.5l-3.2-3.2l1-1l2.2,2.2l4.8-4.8l1,1L8.7,13.5z","data-icon-path":"inner-path",opacity:"0"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Xt||(Xt=i.createElement("path",{d:"M12,1C6,1,1,6,1,12s5,11,11,11s11-4.9,11-11S18.1,1,12,1z M10.4,16.3l-3.9-3.9l1.3-1.2l2.7,2.7l5.8-5.8l1.3,1.3L10.4,16.3z"})),Ct||(Ct=i.createElement("path",{fill:"none",d:"M10.4,16.3l-3.9-3.9l1.3-1.2l2.7,2.7l5.8-5.8l1.3,1.3L10.4,16.3z","data-icon-path":"inner-path",opacity:"0"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ht||(Ht=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM14,21.5908l-5-5L10.5906,15,14,18.4092,21.41,11l1.5957,1.5859Z"})),kt||(kt=i.createElement("path",{fill:"none",d:"M14 21.591L9 16.591 10.591 15 14 18.409 21.41 11 23.005 12.585 14 21.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nt||(Nt=i.createElement("path",{d:"M30,24a6,6,0,1,0-6,6A6.0066,6.0066,0,0,0,30,24Zm-2,0a3.9521,3.9521,0,0,1-.5669,2.019L21.981,20.5669A3.9529,3.9529,0,0,1,24,20,4.0045,4.0045,0,0,1,28,24Zm-8,0a3.9521,3.9521,0,0,1,.5669-2.019l5.4521,5.4521A3.9529,3.9529,0,0,1,24,28,4.0045,4.0045,0,0,1,20,24Z"})),Zt||(Zt=i.createElement("path",{d:"M14,2a12,12,0,1,0,2,23.82V24a8,8,0,0,1,8-8h1.82A11.9348,11.9348,0,0,0,14,2ZM12,18.5908l-4-4L9.5908,13,12,15.4092,17.4092,10,19,11.5908Z"})),Yt||(Yt=i.createElement("path",{fill:"none",d:"M12 18.591L8 14.591 9.591 13 12 15.409 17.409 10 19 11.591 12 18.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pt||(Pt=i.createElement("path",{d:"M14,2a12,12,0,1,0,3.3928,23.5059l3.9246-7.8492A2.9846,2.9846,0,0,1,24,16h1.82A11.9348,11.9348,0,0,0,14,2ZM12,18.5908l-4-4L9.5908,13,12,15.4092,17.4092,10,19,11.5908Z"})),jt||(jt=i.createElement("path",{d:"M27.38,28H20.6178L24,21.2358ZM24,18a1,1,0,0,0-.8947.5527l-5,10A1.0005,1.0005,0,0,0,19,30H29a1,1,0,0,0,.9214-1.3892L24.8946,18.5527A1,1,0,0,0,24,18Z"})),Kt||(Kt=i.createElement("path",{fill:"none",d:"M12 18.591L8 14.591 9.591 13 12 15.409 17.409 10 19 11.591 12 18.591z","data-icon-path":"inner-path"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gt||(Gt=i.createElement("path",{d:"M14 21.414L9 16.413 10.413 15 14 18.586 21.585 11 23 12.415 14 21.414z"})),Qt||(Qt=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,26A12,12,0,1,1,28,16,12,12,0,0,1,16,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jt||(Jt=i.createElement("path",{d:"M14,24A10,10,0,1,1,24,14h2A12,12,0,1,0,14,26Z"})),$t||($t=i.createElement("path",{d:"M12 15.59L9.41 13 8 14.41 12 18.41 19 11.41 17.59 10 12 15.59zM30 24a6 6 0 10-6 6A6.0066 6.0066 0 0030 24zm-2 0a3.9521 3.9521 0 01-.5669 2.019L21.981 20.5669A3.9529 3.9529 0 0124 20 4.0045 4.0045 0 0128 24zm-8 0a3.9521 3.9521 0 01.5669-2.019l5.4521 5.4521A3.9529 3.9529 0 0124 28 4.0045 4.0045 0 0120 24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ln);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),e_||(e_=i.createElement("path",{d:"M14,24A10,10,0,1,1,24,14h2A12,12,0,1,0,14,26Z"})),i_||(i_=i.createElement("path",{d:"M12 15.59L9.41 13 8 14.41 12 18.41 19 11.41 17.59 10 12 15.59zM27.38 28H20.6178L24 21.2358zM24 18a1 1 0 00-.8947.5527l-5 10A1.0005 1.0005 0 0019 30H29a1 1 0 00.9214-1.3892L24.8946 18.5527A1 1 0 0024 18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),t_||(t_=i.createElement("path",{d:"M27.2314,23.6182,20,13.6748V4h2V2H10V4h2v9.6748L4.7686,23.6182A4.0183,4.0183,0,0,0,8.0186,30H23.9814a4.0183,4.0183,0,0,0,3.25-6.3818ZM14,14.3252V4h4V14.3252L20.6728,18H11.3272ZM23.9814,28H8.0186a2.0192,2.0192,0,0,1-1.6329-3.2061L9.8726,20H22.1274l3.4869,4.7939A2.0192,2.0192,0,0,1,23.9814,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),__||(__=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20z"})),s_||(s_=i.createElement("path",{d:"M20,13.67V4h2V2H10V4h2v9.67L9.58,17h2.4767L14,14.33V4h4V14.33l7.61,10.46a2.0133,2.0133,0,0,1-.44,2.82,2.0406,2.0406,0,0,1-1.19.39H15v2h8.98a4.0154,4.0154,0,0,0,3.25-6.38Z"})),_)})).propTypes=da;var Dr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 6",fill:"currentColor"},n),a_||(a_=i.createElement("path",{d:"M5 6L0 1 0.7 0.3 5 4.6 9.3 0.3 10 1z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),n_||(n_=i.createElement("path",{d:"M8 11L3 6 3.7 5.3 8 9.6 12.3 5.3 13 6z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),r_||(r_=i.createElement("path",{d:"M16 22L6 12 7.4 10.6 16 19.2 24.6 10.6 26 12z"})),_)}));Dr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6 10",fill:"currentColor"},n),l_||(l_=i.createElement("path",{d:"M0 5L5 0 5.7 0.7 1.4 5 5.7 9.3 5 10z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),d_||(d_=i.createElement("path",{d:"M5 8L10 3 10.7 3.7 6.4 8 10.7 12.3 10 13z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),o_||(o_=i.createElement("path",{d:"M10 16L20 6 21.4 7.4 12.8 16 21.4 24.6 20 26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),m_||(m_=i.createElement("path",{d:"M15 9L15 15 9 15z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),v_||(v_=i.createElement("path",{d:"M31 19L31 31 19 31 31 19z"})),_)})).propTypes=da;var yr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6 10",fill:"currentColor"},n),c_||(c_=i.createElement("path",{d:"M6 5L1 10 0.3 9.3 4.6 5 0.3 0.7 1 0z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),u_||(u_=i.createElement("path",{d:"M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),f_||(f_=i.createElement("path",{d:"M22 16L12 26 10.6 24.6 19.2 16 10.6 7.4 12 6z"})),_)}));yr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,An);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),b_||(b_=i.createElement("path",{d:"M8 14L4.5 10.5 5.2 9.8 8 12.6 10.8 9.8 11.5 10.5zM8 2L11.5 5.5 10.8 6.2 8 3.4 5.2 6.2 4.5 5.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),p_||(p_=i.createElement("path",{d:"M16 28L9 21 10.41 19.59 16 25.17 21.59 19.59 23 21 16 28zM16 4L23 11 21.59 12.41 16 6.83 10.41 12.41 9 11 16 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),g_||(g_=i.createElement("path",{d:"M8 14L4.5 10.5 5.2 9.8 8 12.6 10.8 9.8 11.5 10.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),E_||(E_=i.createElement("path",{d:"M16 28L9 21 10.4 19.6 16 25.2 21.6 19.6 23 21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wn);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),w_||(w_=i.createElement("path",{d:"M8 2L11.5 5.5 10.8 6.2 8 3.4 5.2 6.2 4.5 5.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),h_||(h_=i.createElement("path",{d:"M16 4L23 11 21.6 12.4 16 6.8 10.4 12.4 9 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Un);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 6",fill:"currentColor"},n),x_||(x_=i.createElement("path",{d:"M5 0L10 5 9.3 5.7 5 1.4 0.7 5.7 0 5z"})),_):16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),z_||(z_=i.createElement("path",{d:"M8 5L13 10 12.3 10.7 8 6.4 3.7 10.7 3 10z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),L_||(L_=i.createElement("path",{d:"M16 10L26 20 24.6 21.4 16 12.8 7.4 21.4 6 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,In);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),M_||(M_=i.createElement("path",{d:"M11,11V21H21V11Zm8,8H13V13h6Z"})),R_||(R_=i.createElement("path",{d:"M30,13V11H26V8a2,2,0,0,0-2-2H21V2H19V6H13V2H11V6H8A2,2,0,0,0,6,8v3H2v2H6v6H2v2H6v3a2,2,0,0,0,2,2h3v4h2V26h6v4h2V26h3a2,2,0,0,0,2-2V21h4V19H26V13ZM24,24H8V8H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),S_||(S_=i.createElement("path",{d:"M28 13L28 4 19 4 19 6 24.586 6 16 14.586 7.414 6 13 6 13 4 4 4 4 13 6 13 6 7.414 15 16.414 15 26 4 26 4 28 28 28 28 26 17 26 17 16.414 26 7.414 26 13 28 13z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,On);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),D_||(D_=i.createElement("path",{d:"M28 6H30V26H28zM17 6L15.57 7.393 23.15 15 2 15 2 17 23.15 17 15.57 24.573 17 26 27 16 17 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),y_||(y_=i.createElement("path",{d:"M29.2427,4.03l-8-2a1.0065,1.0065,0,0,0-.6143.0415l-9.7,3.88L3.2427,4.03A1,1,0,0,0,2,5V27a1,1,0,0,0,.7573.97l8,2A1.0244,1.0244,0,0,0,11,30a.9953.9953,0,0,0,.3716-.0718l9.7-3.88,7.686,1.9219A1,1,0,0,0,30,27V5A1,1,0,0,0,29.2427,4.03ZM28,11H22V4.2806l6,1.5ZM10,19H4V13h6Zm2-8V7.6771l8-3.2V11Zm8,2v6H12V13Zm-8,8h8v3.3227l-8,3.2Zm10-8h6v6H22ZM10,7.7806V11H4V6.2806ZM4,21h6v6.7192l-6-1.5Zm18,3.2187V21h6v4.7192Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),V_||(V_=i.createElement("path",{d:"M30.3335 30H26V28h4V26H28a2.002 2.002 0 01-2-2V21.6665A1.6684 1.6684 0 0127.6665 20H32v2H28v2h2a2.002 2.002 0 012 2v2.3335A1.6684 1.6684 0 0130.3335 30zM22.3335 20h-2.667A1.6665 1.6665 0 0018 21.6665V30h2V26h2v4h2V21.6665A1.6665 1.6665 0 0022.3335 20zM20 24V22h2v2zM12.5 24L11 20 9 20 9 30 11 30 11 23 12.5 27 14 23 14 30 16 30 16 20 14 20 12.5 24zM1 22v6.5A1.4727 1.4727 0 002.5 30H7V28H3V22H7V20H3A2.0059 2.0059 0 001 22zM13 8L11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13 16 11 13 11 13 8z"})),A_||(A_=i.createElement("path",{d:"M6,6H26V18h2V6a2.0059,2.0059,0,0,0-2-2H6A2.0059,2.0059,0,0,0,4,6V18H6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),T_||(T_=i.createElement("path",{d:"M24 16L19.4 14.6 21.7 10.3 17.4 12.6 16 8 14.6 12.6 10.3 10.3 12.6 14.6 8 16 12.6 17.4 10.3 21.7 14.6 19.4 16 24 17.4 19.4 21.7 21.7 19.4 17.4 24 16z"})),W_||(W_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),U_||(U_=i.createElement("path",{d:"M28 2H23V4h5V28H23v2h5a2.0059 2.0059 0 002-2V4A2.0059 2.0059 0 0028 2zM14 17H8a.9448.9448 0 00-1 1v6a.9448.9448 0 001 1h6a.9448.9448 0 001-1V18A.9448.9448 0 0014 17zm-1 6H9V19h4z"})),I_||(I_=i.createElement("path",{d:"M25 24V18a.9448.9448 0 00-1-1H18a.9448.9448 0 00-1 1v6a.9448.9448 0 001 1h6A1.0021 1.0021 0 0025 24zm-2-1H19V19h4zM14 7H8A.9448.9448 0 007 8v6a.9448.9448 0 001 1h6a.9448.9448 0 001-1V8A.9448.9448 0 0014 7zm-1 6H9V9h4zM18 15h6a.9448.9448 0 001-1V8a.9448.9448 0 00-1-1H18a.9448.9448 0 00-1 1v6A1.0021 1.0021 0 0018 15zm1-6h4v4H19z"})),B_||(B_=i.createElement("path",{d:"M4,4H9V2H4A2.0059,2.0059,0,0,0,2,4V28a2.0059,2.0059,0,0,0,2,2H9V28H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),O_||(O_=i.createElement("path",{d:"M22 22L24 22 24 28 22 28 22 30 28 30 28 28 26 28 26 22 28 22 28 20 22 20 22 22zM18 28H16V20H14v8.6A1.4529 1.4529 0 0015.5 30h3A1.4529 1.4529 0 0020 28.6V20H18zM10.2 20L10 28.5 9 22 7 22 6 28.5 5.8 20 4 20 4.72 30 7 30 8 23.5 9 30 11.28 30 12 20 10.2 20zM16 11L13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13 16 11z"})),F_||(F_=i.createElement("path",{d:"M26,4H6A2.0059,2.0059,0,0,0,4,6V18H6V6H26V18h2V6A2.0059,2.0059,0,0,0,26,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),q_||(q_=i.createElement("path",{d:"M23.5 18L21 18.7 21 16 19 16 19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18zM16 13L16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16 13 13 16 13z"})),X_||(X_=i.createElement("path",{d:"M26,4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V6A2.0059,2.0059,0,0,0,26,4ZM6,26V6H26V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),C_||(C_=i.createElement("path",{d:"M22 2L22 4 26.6 4 20 10.6 21.4 12 28 5.4 28 10 30 10 30 2 22 2zM19 16L19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18 21 18.7 21 16 19 16zM13 16L13 13 16 13 16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16z"})),H_||(H_=i.createElement("path",{d:"M26,26H6V6H19V4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V13H26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),k_||(k_=i.createElement("path",{d:"M26 7H28V10H26zM29 4H32V6H29zM26 0H28V3H26zM22 4H25V6H22zM19 16L19 18.7 16.5 18 16 19.9 18.4 20.6 17 23 18.7 24 20 21.8 21.3 24 23 23 21.6 20.6 24 19.9 23.5 18 21 18.7 21 16 19 16zM13 16L13 13 16 13 16 11 13 11 13 8 11 8 11 11 8 11 8 13 11 13 11 16 13 16z"})),N_||(N_=i.createElement("path",{d:"M26,26H6V6H19V4H6A2.0059,2.0059,0,0,0,4,6V26a2.0059,2.0059,0,0,0,2,2H26a2.0059,2.0059,0,0,0,2-2V13H26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Z_||(Z_=i.createElement("path",{d:"M8 18.6V17H6v1.6A7.3833 7.3833 0 0013.4 26H15V24H13.4A5.3775 5.3775 0 018 18.6zM28 18H20a2.0059 2.0059 0 00-2 2v8a2.0059 2.0059 0 002 2h8a2.0059 2.0059 0 002-2V20A2.0059 2.0059 0 0028 18zM20 28V20h8v8zM24 13.4V15h2V13.4A7.3833 7.3833 0 0018.6 6H17V8h1.6A5.3775 5.3775 0 0124 13.4zM12 2H4A2.0059 2.0059 0 002 4v8a2.0059 2.0059 0 002 2h8a2.0059 2.0059 0 002-2V4A2.0059 2.0059 0 0012 2zM4 12V4h8v8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Y_||(Y_=i.createElement("circle",{cx:"16",cy:"16",r:"10"})),P_||(P_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),j_||(j_=i.createElement("circle",{cx:"16",cy:"16",r:"14"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),K_||(K_=i.createElement("path",{d:"M7.7 4.7a14.7 14.7 0 00-3 3.1L6.3 9A13.26 13.26 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.51 12.51 0 002 16H4A11.48 11.48 0 014.6 12.3zM2.7 20.4a14.4 14.4 0 002 3.9l1.6-1.2a12.89 12.89 0 01-1.7-3.3zM7.8 27.3a14.4 14.4 0 003.9 2l.6-1.9A12.89 12.89 0 019 25.7zM11.7 2.7l.6 1.9A11.48 11.48 0 0116 4V2A12.51 12.51 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.53 11.53 0 0123 25.7zM27.4 19.7l1.9.6A15.47 15.47 0 0030 16H28A11.48 11.48 0 0127.4 19.7zM29.2 11.6a14.4 14.4 0 00-2-3.9L25.6 8.9a12.89 12.89 0 011.7 3.3zM24.1 4.6a14.4 14.4 0 00-3.9-2l-.6 1.9a12.89 12.89 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.48 11.48 0 0116 28v2A21.42 21.42 0 0020.3 29.3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gn);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),G_||(G_=i.createElement("circle",{cx:"8",cy:"8",r:"6"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Q_||(Q_=i.createElement("circle",{cx:"8",cy:"8",r:"6"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),J_||(J_=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14,14,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4Z"})),$_||($_=i.createElement("path",{d:"M21,12.41V16h2V9H16v2h3.59L11,19.59V16H9v7h7V21H12.41Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jn);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),es||(es=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm7.5,7A3.5,3.5,0,1,1,20,12.5,3.5041,3.5041,0,0,1,23.5,9Zm.4348-1.978C23.791,7.0107,23.6467,7,23.5,7a5.4826,5.4826,0,0,0-4.1323,1.8784,8.0109,8.0109,0,0,0-5.5664-4.6675A11.8554,11.8554,0,0,1,23.9348,7.022ZM16,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,28ZM12,18a6,6,0,1,1,6-6A6.0067,6.0067,0,0,1,12,18ZM4,16a11.97,11.97,0,0,1,.2112-2.1987,7.9921,7.9921,0,0,0,7.3459,6.1762,5.9581,5.9581,0,0,0-.89,6.7564A12.0025,12.0025,0,0,1,4,16ZM21.3325,26.7339a5.9834,5.9834,0,0,0-4.1782-8.6206,8.02,8.02,0,0,0,1.9126-2.3672,5.4883,5.4883,0,0,0,8.9167-.0679c.003.1079.0164.2134.0164.3218A12.0025,12.0025,0,0,1,21.3325,26.7339Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$n);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),is||(is=i.createElement("path",{d:"M8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4M8,2a6,6,0,1,0,6,6A6,6,0,0,0,8,2Z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),ts||(ts=i.createElement("path",{d:"M8,4A4,4,0,1,1,4,8,4.0045,4.0045,0,0,1,8,4M8,2a6,6,0,1,0,6,6A6,6,0,0,0,8,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,er);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_s||(_s=i.createElement("path",{d:"M18 9L18 15 14 15 14 9 12 9 12 23 14 23 14 17 18 17 18 23 20 23 20 9 18 9z"})),ss||(ss=i.createElement("path",{d:"M30,15H26V6a2,2,0,0,0-2-2H8A2,2,0,0,0,6,6v9H2v2H6v9a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V17h4ZM8,26V6H24V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ir);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),as||(as=i.createElement("circle",{cx:"15",cy:"19",r:"1"})),ns||(ns=i.createElement("path",{d:"M27.7,9.3l-7-7A.9087.9087,0,0,0,20,2H10A2.0058,2.0058,0,0,0,8,4V14H6a2.0023,2.0023,0,0,0-2,2v6a2.0023,2.0023,0,0,0,2,2H8v4a2.0058,2.0058,0,0,0,2,2H26a2.0058,2.0058,0,0,0,2-2V10A.9092.9092,0,0,0,27.7,9.3ZM20,4.4,25.6,10H20ZM6,16h9.5972L19,19l-3.3926,3H6ZM26,28H10V24h5.6089a2.0076,2.0076,0,0,0,1.3135-.4927l3.3833-2.9917a2.0015,2.0015,0,0,0,.01-3.0229l-3.4033-3.0083A1.9961,1.9961,0,0,0,15.6089,14H10V4h8v6a2.0058,2.0058,0,0,0,2,2h6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rs||(rs=i.createElement("path",{d:"M30 10V2H22v8h3v4H23v2h7V14H27V10zM24 4h4V8H24zM20 23.41L18.59 22 16 24.59 13.41 22 12 23.41 14.59 26 12 28.59 13.41 30 16 27.41 18.59 30 20 28.59 17.41 26 20 23.41zM20 14L12 14 12 16 15 16 15 21 17 21 17 16 20 16 20 14zM7 9.86a4 4 0 10-2 0V14H2v2H9V14H7zM4 6A2 2 0 116 8 2 2 0 014 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_r);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ls||(ls=i.createElement("path",{d:"M20 18H26V20H20z",transform:"rotate(-180 23 19)"})),ds||(ds=i.createElement("path",{d:"M24 26H30V28H24z",transform:"rotate(-180 27 27)"})),os||(os=i.createElement("path",{d:"M22 22H28V24H22z",transform:"rotate(-180 25 23)"})),ms||(ms=i.createElement("path",{d:"M17.0029,20a4.8952,4.8952,0,0,0-2.4044-4.1729L22,3,20.2691,2,12.6933,15.126A5.6988,5.6988,0,0,0,7.45,16.6289C3.7064,20.24,3.9963,28.6821,4.01,29.04a1,1,0,0,0,1,.96H20.0012a1,1,0,0,0,.6-1.8C17.0615,25.5439,17.0029,20.0537,17.0029,20ZM11.93,16.9971A3.11,3.11,0,0,1,15.0041,20c0,.0381.0019.208.0168.4688L9.1215,17.8452A3.8,3.8,0,0,1,11.93,16.9971ZM15.4494,28A5.2,5.2,0,0,1,14,25H12a6.4993,6.4993,0,0,0,.9684,3H10.7451A16.6166,16.6166,0,0,1,10,24H8a17.3424,17.3424,0,0,0,.6652,4H6c.031-1.8364.29-5.8921,1.8027-8.5527l7.533,3.35A13.0253,13.0253,0,0,0,17.5968,28Z"})),_)})).propTypes=da;var Vr=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vs||(vs=i.createElement("path",{d:"M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z"})),_)}));Vr.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ar);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),cs||(cs=i.createElement("path",{d:"M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7S11.9,1,8,1z M10.7,11.5L8,8.8l-2.7,2.7l-0.8-0.8L7.2,8L4.5,5.3l0.8-0.8L8,7.2 l2.7-2.7l0.8,0.8L8.8,8l2.7,2.7L10.7,11.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),us||(us=i.createElement("path",{d:"M16,2C8.2,2,2,8.2,2,16s6.2,14,14,14s14-6.2,14-14S23.8,2,16,2z M21.4,23L16,17.6L10.6,23L9,21.4l5.4-5.4L9,10.6L10.6,9 l5.4,5.4L21.4,9l1.6,1.6L17.6,16l5.4,5.4L21.4,23z"})),fs||(fs=i.createElement("path",{d:"M14.4 16L9 10.6 10.6 9 16 14.4 21.4 9 23 10.6 17.6 16 23 21.4 21.4 23 16 17.6 10.6 23 9 21.4 14.4 16","data-icon-path":"inner-path",opacity:"0"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bs||(bs=i.createElement("path",{d:"M16,2C8.2,2,2,8.2,2,16s6.2,14,14,14s14-6.2,14-14S23.8,2,16,2z M16,28C9.4,28,4,22.6,4,16S9.4,4,16,4s12,5.4,12,12 S22.6,28,16,28z"})),ps||(ps=i.createElement("path",{d:"M21.4 23L16 17.6 10.6 23 9 21.4 14.4 16 9 10.6 10.6 9 16 14.4 21.4 9 23 10.6 17.6 16 23 21.4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gs||(gs=i.createElement("path",{d:"M15 21H10a2 2 0 01-2-2V13a2 2 0 012-2h5v2H10v6h5zM25 21H20a2 2 0 01-2-2V13a2 2 0 012-2h5v2H20v6h5z"})),Es||(Es=i.createElement("path",{d:"M28,26H4a2,2,0,0,1-2-2V8A2,2,0,0,1,4,6H28a2,2,0,0,1,2,2V24A2,2,0,0,1,28,26ZM4,8V24H28V8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ws||(ws=i.createElement("path",{d:"M19 17H25V19H19zM11 17H17V19H11zM6 17H9V19H6zM22 13H26V15H22zM13 13H20V15H13zM6 13H11V15H6z"})),hs||(hs=i.createElement("path",{d:"M17.7358,30,16,29l4-7h6a1.9966,1.9966,0,0,0,2-2V8a1.9966,1.9966,0,0,0-2-2H6A1.9966,1.9966,0,0,0,4,8V20a1.9966,1.9966,0,0,0,2,2h9v2H6a3.9993,3.9993,0,0,1-4-4V8A3.9988,3.9988,0,0,1,6,4H26a3.9988,3.9988,0,0,1,4,4V20a3.9993,3.9993,0,0,1-4,4H21.1646Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xs||(xs=i.createElement("path",{d:"M28,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6ZM15,13H10v6h5v2H10a2,2,0,0,1-2-2V13a2,2,0,0,1,2-2h5Zm10,0H20v6h5v2H20a2,2,0,0,1-2-2V13a2,2,0,0,1,2-2h5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,or);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zs||(zs=i.createElement("path",{d:"M16,7h0a7.66,7.66,0,0,1,1.51.15,8,8,0,0,1,6.35,6.34l.26,1.35,1.35.24a5.5,5.5,0,0,1-1,10.92H7.5a5.5,5.5,0,0,1-1-10.92l1.34-.24.26-1.35A8,8,0,0,1,16,7m0-2a10,10,0,0,0-9.83,8.12A7.5,7.5,0,0,0,7.49,28h17a7.5,7.5,0,0,0,1.32-14.88,10,10,0,0,0-7.94-7.94A10.27,10.27,0,0,0,16,5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ls||(Ls=i.createElement("path",{d:"M28,17v5H4V6H15V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V17ZM18,28H14V24h4Z"})),Ms||(Ms=i.createElement("path",{d:"M29,14H17a1,1,0,0,1-.8574-1.5144l6-10a1,1,0,0,1,1.7154,0l6,10A1,1,0,0,1,29,14ZM18.7661,12h8.4678L23,4.9436Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rs||(Rs=i.createElement("path",{d:"M28,16v6H4V6H16V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V16ZM18,28H14V24h4Z"})),Ss||(Ss=i.createElement("path",{d:"M21 15L16 10.04 17.59 8.47 21 11.85 28.41 4.5 30 6.08 21 15z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ds||(Ds=i.createElement("path",{d:"M28 18H30V28H28zM24 14H26V28H24zM20 22H22V28H20zM22.175 10L23.76 8.7339A9.9522 9.9522 0 0017.89 5.1816 10.0025 10.0025 0 006.17 13.1152 7.5054 7.5054 0 00.0544 21.4087 7.6843 7.6843 0 007.7692 28H16V26H7.6945a5.632 5.632 0 01-5.6023-4.4858 5.5064 5.5064 0 014.4339-6.4307l1.3486-.2441.2139-1.11a8.206 8.206 0 016.7426-6.6426 7.9666 7.9666 0 013.0137.13A7.8037 7.8037 0 0122.175 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ur);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ys||(ys=i.createElement("path",{d:"M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"})),Vs||(Vs=i.createElement("path",{d:"M17 26.17L17 14 15 14 15 26.17 12.41 23.59 11 25 16 30 21 25 19.59 23.59 17 26.17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),As||(As=i.createElement("path",{d:"M28 16v6H4V6H15V4H4A2 2 0 002 6V22a2 2 0 002 2h8v4H8v2H24V28H20V24h8a2 2 0 002-2V16zM18 28H14V24h4zM18 4H30V6H18z"})),Ts||(Ts=i.createElement("path",{d:"M18 8H30V10H18zM18 12H24V14H18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,br);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ws||(Ws=i.createElement("path",{d:"M28,16v6H4V6h7V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V16ZM18,28H14V24h4Z"})),Us||(Us=i.createElement("path",{d:"M18,18h-.01a1,1,0,0,1-.9511-.7253L15.2456,11H11V9h5a1,1,0,0,1,.9615.7252l1.0742,3.7589,3.0088-9.7783A1.0142,1.0142,0,0,1,22,3a.98.98,0,0,1,.9487.6838L24.7207,9H30v2H24a1,1,0,0,1-.9487-.6838l-1.0132-3.04L18.9556,17.2942A1,1,0,0,1,18,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Is||(Is=i.createElement("path",{d:"M24.8008 12.1362a8.8694 8.8694 0 00-.9795-2.5434L30 3.4142 28.5872 2 2 28.5872 3.4142 30l5-5H23.5a6.4974 6.4974 0 001.3008-12.8638zM23.5 23H10.4141L22.3418 11.0723a6.9049 6.9049 0 01.6006 2.0708l.0986.812.8154.0639A4.4975 4.4975 0 0123.5 23zM4.2964 23.4487l1.4313-1.4311A4.4774 4.4774 0 018.144 14.019l.8155-.0639.0991-.812a6.9867 6.9867 0 0110.63-5.0865l1.4431-1.4428A8.9859 8.9859 0 007.2 12.1362 6.4891 6.4891 0 004.2964 23.4487z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bs||(Bs=i.createElement("path",{d:"M28,17v5H4V6H14V4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V17ZM18,28H14V24h4Z"})),Os||(Os=i.createElement("path",{d:"M30,10V8H27.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,24,4.1011V2H22V4.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,18.1011,8H16v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,22,13.8989V16h2V13.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,27.8989,10Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,23,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Er);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fs||(Fs=i.createElement("path",{d:"M11 18L12.41 19.41 15 16.83 15 29 17 29 17 16.83 19.59 19.41 21 18 16 13 11 18z"})),qs||(qs=i.createElement("path",{d:"M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xs||(Xs=i.createElement("path",{d:"M25.8289 13.1155A10.02 10.02 0 0016 5.0005V7a8.0233 8.0233 0 017.8649 6.4934l.2591 1.346 1.3488.2441A5.5019 5.5019 0 0124.5076 26H16v2h8.5076a7.5019 7.5019 0 001.3213-14.8845zM8 24H14V26H8zM4 24H6V26H4zM6 20H14V22H6zM2 20H4V22H2zM8 16H14V18H8zM4 16H6V18H4zM10 12H14V14H10zM6 12H8V14H6zM12 8H14V10H12z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cs||(Cs=i.createElement("path",{d:"M2 28H11V30H2zM21 28H30V30H21zM17 26.167L17 17.832 19.586 20.414 21 19 16 14 11 19 12.413 20.415 15 17.832 15 26.167 12.413 23.584 11 25 16 30 21 25 19.586 23.586 17 26.167z"})),Hs||(Hs=i.createElement("path",{d:"M23,16H21V14h2a3,3,0,0,0,0-6c-.0938.0144-.1538.0219-.2153.0263l-.8037.0572L21.7544,7.31a5.9927,5.9927,0,0,0-11.1758-.8655l-.2832.5994-.8423-.0455A3.5008,3.5008,0,0,0,9.5,14H11v2H9.5A5.5,5.5,0,0,1,9.07,5.0166,7.9909,7.9909,0,0,1,23.42,6.0175,5,5,0,0,1,23,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ks||(ks=i.createElement("path",{d:"M16,7h0a7.66,7.66,0,0,1,1.51.15,8,8,0,0,1,6.35,6.34l.26,1.35,1.35.24a5.5,5.5,0,0,1-1,10.92H7.5a5.5,5.5,0,0,1-1-10.92l1.34-.24.26-1.35A8,8,0,0,1,16,7m0-2a10,10,0,0,0-9.83,8.12A7.5,7.5,0,0,0,7.49,28h17a7.5,7.5,0,0,0,1.32-14.88,10,10,0,0,0-7.94-7.94A10.27,10.27,0,0,0,16,5Z"})),Ns||(Ns=i.createElement("path",{d:"M14 24H11a2 2 0 01-2-2V19a2 2 0 012-2h3v2H11v3h3zM21 15V13H19a2 2 0 00-2 2v2H16v2h1v5h2V19h2V17H19V15z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zs||(Zs=i.createElement("path",{d:"M25 11L25 9 17 9 17 23 19 23 19 17 24 17 24 15 19 15 19 11 25 11zM15 23H9a2 2 0 01-2-2V11A2 2 0 019 9h6v2H9V21h6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ys||(Ys=i.createElement("path",{d:"M28 30H23a2.0023 2.0023 0 01-2-2V23a2.0023 2.0023 0 012-2h5a2.0023 2.0023 0 012 2v5A2.0023 2.0023 0 0128 30zm-5-7h-.0012L23 28h5V23zM16 23H11a2.0023 2.0023 0 01-2-2V11a2.0023 2.0023 0 012-2H21a2.0023 2.0023 0 012 2v5H21V11H11V21h5z"})),Ps||(Ps=i.createElement("path",{d:"M16,30H4a2.0023,2.0023,0,0,1-2-2V4A2.0023,2.0023,0,0,1,4,2H28a2.0023,2.0023,0,0,1,2,2V16H28V4H4V28H16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),js||(js=i.createElement("circle",{cx:"9",cy:"20",r:"2"})),Ks||(Ks=i.createElement("path",{d:"M16,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,16,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,16,14Z"})),Gs||(Gs=i.createElement("circle",{cx:"23",cy:"12",r:"2"})),Qs||(Qs=i.createElement("path",{d:"M16,31a.9988.9988,0,0,1-.5039-.1357l-12-7A1.0008,1.0008,0,0,1,3,23V9a.9994.9994,0,0,1,.4961-.8638l12-7a1,1,0,0,1,1.0078,0l12,7L27.4961,9.8638,16,3.1577,5,9.5742V22.4258l11,6.417,11-6.417V15h2v8a1.0008,1.0008,0,0,1-.4961.8643l-12,7A.9988.9988,0,0,1,16,31Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Js||(Js=i.createElement("path",{d:"M32,26V24H29.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,26,20.1011V18H24v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,20.1011,24H18v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,24,29.8989V32h2V29.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,29.8989,26Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,25,28Z"})),$s||($s=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),ea||(ea=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),ia||(ia=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),ta||(ta=i.createElement("path",{d:"M13.0205,28.2715,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L12.0127,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sr);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_a||(_a=i.createElement("path",{d:"M30.9763,24.9748l-5.0015,5.0015a3.501,3.501,0,0,1-4.9511-4.9511L22.4383,26.44A1.5,1.5,0,0,0,24.56,28.5617L29.5617,23.56A1.5,1.5,0,0,0,27.44,21.4383l-1.4146-1.4146a3.501,3.501,0,0,1,4.9511,4.9511Z"})),sa||(sa=i.createElement("path",{d:"M20.0252,21.0237l-5.0015,5.0015a3.501,3.501,0,0,0,4.9511,4.9511L18.56,29.5617A1.5,1.5,0,0,1,16.4383,27.44L21.44,22.4383A1.5,1.5,0,0,1,23.5617,24.56l1.4146,1.4146a3.501,3.501,0,0,0-4.9511-4.9511Z"})),aa||(aa=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),na||(na=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),ra||(ra=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),la||(la=i.createElement("path",{d:"M11.3076,27.2725,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L10.3,29Z"})),_)})).propTypes=da;var Ar=!("undefined"===typeof window||!window.document||!window.document.createElement),Tr=function(){var e=0;return function(){return++e}}(),Wr=Ar?i.useLayoutEffect:i.useEffect,Ur=!1;function Ir(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id",t=q((0,i.useState)((function(){return Ur?"".concat(e,"-").concat(Tr()):null})),2),_=t[0],s=t[1];return Wr((function(){null===_&&s("".concat(e,"-").concat(Tr()))}),[Tr]),(0,i.useEffect)((function(){!1===Ur&&(Ur=!0)}),[]),_}var Br={};function Or(e,i){return function(i,t,_){if(void 0!==i[t]){Br[_]&&Br[_][t]||(Br[_]=R(R({},Br[_]),{},A({},t,!0)));for(var s=arguments.length,a=new Array(s>3?s-3:0),n=3;n1&&void 0!==arguments[1]?arguments[1]:{},t=i.key,_=i.which,s=i.keyCode;return"string"===typeof e?e===t:"number"===typeof e?e===_||e===s:e.key&&Array.isArray(t)?-1!==t.indexOf(e.key):e.key===t||e.which===_||e.keyCode===s}Xr.propTypes={as:P().oneOfType([P().func,P().string,P().elementType]),children:P().node.isRequired,dir:P().oneOf(["ltr","rtl","auto"])};var Hr={key:["Escape","Esc"],which:27,keyCode:27},kr=["children","className","iconDescription","open","onHeadingClick","renderExpando","renderToggle","title","disabled"],Nr=function(e){return i.createElement("button",T({type:"button"},e))};function Zr(e){var t,_=e.children,s=e.className;e.iconDescription;var a=e.open,n=void 0!==a&&a,r=e.onHeadingClick,l=e.renderExpando,d=void 0===l?Nr:l,o=e.renderToggle,m=e.title,v=void 0===m?"title":m,c=e.disabled,u=B(e,kr),f=q((0,i.useState)(n),2),b=f[0],p=f[1],g=q((0,i.useState)(n),2),E=g[0],w=g[1],h=q((0,i.useState)(""),2),x=h[0],z=h[1],L=Ir("accordion-item"),M=Z(),R=k()((A(t={},"".concat(M,"--accordion__item"),!0),A(t,"".concat(M,"--accordion__item--active"),b),A(t,"".concat(M,"--accordion__item--").concat(x),x),A(t,"".concat(M,"--accordion__item--disabled"),c),A(t,s,!!s),t)),S=o||d;return n!==E&&(z(b?"collapsing":"expanding"),p(n),w(n)),i.createElement("li",T({className:R},u,{onAnimationEnd:function(e){u.handleAnimationEnd&&u.handleAnimationEnd(e),z("")}}),i.createElement(S,{disabled:c,"aria-controls":L,"aria-expanded":b,className:"".concat(M,"--accordion__heading"),onClick:function(e){var i=!b;z(b?"collapsing":"expanding"),p(i),r&&r({isOpen:i,event:e})},onKeyDown:function(e){b&&Cr(e,Hr)&&p(!1)},type:"button"},i.createElement(yr,{className:"".concat(M,"--accordion__arrow")}),i.createElement(Xr,{as:"div",className:"".concat(M,"--accordion__title")},v)),i.createElement("div",{id:L,className:"".concat(M,"--accordion__content")},_))}Zr.propTypes={children:P().node,className:P().string,disabled:P().bool,onClick:P().func,onHeadingClick:P().func,open:P().bool,renderExpando:Or(P().func),renderToggle:P().func,title:P().node};var Yr=["className","id","labelText","onChange","indeterminate","hideLabel","title"],Pr=i.forwardRef((function(e,t){var _=e.className,s=e.id,a=e.labelText,n=e.onChange,r=e.indeterminate,l=e.hideLabel,d=e.title,o=void 0===d?"":d,m=B(e,Yr),v=Z(),c=k()("".concat(v,"--checkbox-label"),[_]),u=k()("".concat(v,"--checkbox-label-text"),A({},"".concat(v,"--visually-hidden"),l)),f=k()("".concat(v,"--form-item"),"".concat(v,"--checkbox-wrapper"),[_]);return i.createElement("div",{className:f},i.createElement("input",T({},m,{type:"checkbox",onChange:function(e){n(e,{checked:e.target.checked,id:s})},className:"".concat(v,"--checkbox"),id:s,ref:function(e){e&&(e.indeterminate=r),"function"===typeof t?t(e):Object(t)===t&&(t.current=e)}})),i.createElement("label",{htmlFor:s,className:c,title:o||null},i.createElement(Xr,{className:u},a)))}));Pr.propTypes={checked:P().bool,className:P().string,defaultChecked:P().bool,disabled:P().bool,hideLabel:P().bool,id:P().string.isRequired,indeterminate:P().bool,labelText:P().node.isRequired,onChange:P().func,title:P().string},Pr.defaultProps={onChange:function(){},indeterminate:!1},Pr.displayName="Checkbox";var jr=Pr;"undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof t.g?t.g:"undefined"!==typeof self&&self;function Kr(e){if(e.__esModule)return e;var i=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(t){var _=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,_.get?_:{enumerable:!0,get:function(){return e[t]}})})),i}var Gr=function(){if("undefined"!==typeof Map)return Map;function e(e,i){var t=-1;return e.some((function(e,_){return e[0]===i&&(t=_,!0)})),t}return function(){function i(){this.__entries__=[]}return Object.defineProperty(i.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),i.prototype.get=function(i){var t=e(this.__entries__,i),_=this.__entries__[t];return _&&_[1]},i.prototype.set=function(i,t){var _=e(this.__entries__,i);~_?this.__entries__[_][1]=t:this.__entries__.push([i,t])},i.prototype.delete=function(i){var t=this.__entries__,_=e(t,i);~_&&t.splice(_,1)},i.prototype.has=function(i){return!!~e(this.__entries__,i)},i.prototype.clear=function(){this.__entries__.splice(0)},i.prototype.forEach=function(e,i){void 0===i&&(i=null);for(var t=0,_=this.__entries__;t<_.length;t++){var s=_[t];e.call(i,s[1],s[0])}},i}()}(),Qr="undefined"!==typeof window&&"undefined"!==typeof document&&window.document===document,Jr="undefined"!==typeof t.g&&t.g.Math===Math?t.g:"undefined"!==typeof self&&self.Math===Math?self:"undefined"!==typeof window&&window.Math===Math?window:Function("return this")(),$r="function"===typeof requestAnimationFrame?requestAnimationFrame.bind(Jr):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var el=["top","right","bottom","left","width","height","size","weight"],il="undefined"!==typeof MutationObserver,tl=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,i){var t=!1,_=!1,s=0;function a(){t&&(t=!1,e()),_&&r()}function n(){$r(a)}function r(){var e=Date.now();if(t){if(e-s<2)return;_=!0}else t=!0,_=!1,setTimeout(n,i);s=e}return r}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var i=this.observers_,t=i.indexOf(e);~t&&i.splice(t,1),!i.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){Qr&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),il?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){Qr&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var i=e.propertyName,t=void 0===i?"":i;el.some((function(e){return!!~t.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),_l=function(e,i){for(var t=0,_=Object.keys(i);t<_.length;t++){var s=_[t];Object.defineProperty(e,s,{value:i[s],enumerable:!1,writable:!1,configurable:!0})}return e},sl=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||Jr},al=ml(0,0,0,0);function nl(e){return parseFloat(e)||0}function rl(e){for(var i=[],t=1;t0},e}(),fl="undefined"!==typeof WeakMap?new WeakMap:new Gr,bl=function e(i){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var t=tl.getInstance(),_=new ul(i,t,this);fl.set(this,_)};["observe","unobserve","disconnect"].forEach((function(e){bl.prototype[e]=function(){var i;return(i=fl.get(this))[e].apply(i,arguments)}}));var pl="undefined"!==typeof Jr.ResizeObserver?Jr.ResizeObserver:bl;var gl,El=(gl=Kr(e))&&"object"===S(gl)&&"default"in gl?gl.default:gl,wl=i;var hl=function(e){void 0===e&&(e={});var i=wl.useRef(null),t=e.onResize,_=wl.useRef(void 0);_.current=t;var s=wl.useRef(),a=e.ref||i,n=wl.useState({width:void 0,height:void 0}),r=n[0],l=n[1],d=wl.useRef({width:void 0,height:void 0});return wl.useEffect((function(){s.current||(s.current=new El((function(e){if(Array.isArray(e)&&e.length){var i=e[0],t=Math.round(i.contentRect.width),s=Math.round(i.contentRect.height);if(d.current.width!==t||d.current.height!==s){var a={width:t,height:s};_.current?_.current(a):(d.current.width=t,d.current.height=s,l(a))}}})))}),[]),wl.useEffect((function(){if("object"===S(a)&&null!==a&&a.current instanceof Element){var e=a.current;return s.current.observe(e),function(){return s.current.unobserve(e)}}}),[a]),wl.useMemo((function(){return{ref:a,width:r.width,height:r.height}}),[a,r?r.width:null,r?r.height:null])},xl=t(95),zl=t.n(xl),Ll=function(e){return function(i){for(var t=arguments.length,_=new Array(t>1?t-1:0),s=1;s=e.length?{done:!0}:{done:!1,value:e[_++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,n=!0,r=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return n=e.done,e},e:function(e){r=!0,a=e},f:function(){try{n||null==t.return||t.return()}finally{if(r)throw a}}}}(e.childNodes);try{for(t.s();!(i=t.n()).done;){var _=Tl(i.value);if(_)return _}}catch(s){t.e(s)}finally{t.f()}return null}Al.propTypes={children:P().node,className:P().string};var Wl=["align","className","children","label","description","enterDelayMs","leaveDelayMs","defaultOpen"];function Ul(e){var t=e.align,_=void 0===t?"top":t,s=e.className,a=e.children,n=e.label,r=e.description,l=e.enterDelayMs,d=void 0===l?100:l,o=e.leaveDelayMs,m=void 0===o?300:o,v=e.defaultOpen,c=void 0!==v&&v,u=B(e,Wl),f=(0,i.useRef)(null),b=(0,i.useRef)(null),p=function(e){var t=q((0,i.useState)(e),2),_=t[0],s=t[1],a=(0,i.useRef)(null),n=(0,i.useCallback)((function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;clearTimeout(a.current),a.current=null,0!==i?a.current=setTimeout((function(){s(e),a.current=null}),i):s(e)}),[]);return(0,i.useEffect)((function(){return function(){clearTimeout(a.current)}}),[]),[_,n]}(c),g=q(p,2),E=g[0],w=g[1],h=Ir("tooltip"),x=Z(),z=i.Children.only(a),L={onFocus:function(){return w(!0)},onBlur:function(){return w(!1)},onMouseEnter:function(){w(!0,d)}};return n?L["aria-labelledby"]=h:L["aria-describedby"]=h,(0,i.useEffect)((function(){Tl(f.current)||w(!1)})),i.createElement(Vl,T({},u,{align:_,className:k()("".concat(x,"--tooltip"),s),dropShadow:!1,highContrast:!0,onKeyDown:function(e){E&&Cr(e,Hr)&&(e.stopPropagation(),w(!1))},onMouseLeave:function(){w(!1,m)},open:E,ref:f}),i.cloneElement(z,L),i.createElement(Al,{"aria-hidden":"true",className:"".concat(x,"--tooltip-content"),id:h,ref:b,role:"tooltip"},n||r))}Ul.propTypes={align:P().oneOf(["top","top-left","top-right","bottom","bottom-left","bottom-right","left","left-bottom","left-top","right","right-bottom","right-top"]),children:P().node,className:P().string,defaultOpen:P().bool,description:P().node,enterDelayMs:P().number,label:P().node,leaveDelayMs:P().number};var Il=["align","children","defaultOpen","enterDelayMs","kind","label","leaveDelayMs","size"],Bl=i.forwardRef((function(e,t){var _=e.align,s=e.children,a=e.defaultOpen,n=void 0!==a&&a,r=e.enterDelayMs,l=e.kind,d=e.label,o=e.leaveDelayMs,m=e.size,v=void 0===m?"md":m,c=B(e,Il),u=Z();return i.createElement(Ul,{align:_,className:"".concat(u,"--icon-tooltip"),defaultOpen:n,enterDelayMs:r,label:d,leaveDelayMs:o},i.createElement(Sl,T({},c,{kind:l,ref:t,size:v}),s))}));Bl.propTypes={align:P().oneOf(["top","top-left","top-right","bottom","bottom-left","bottom-right","left","right"]),children:P().node,defaultOpen:P().bool,enterDelayMs:P().number,kind:P().oneOf(["primary","secondary","ghost","tertiary"]),label:P().node.isRequired,leaveDelayMs:P().number,size:P().oneOf(["sm","md","lg"])};var Ol,Fl,ql,Xl,Cl,Hl,kl,Nl,Zl,Yl,Pl,jl,Kl,Gl,Ql,Jl,$l,ed,id,td,_d,sd,ad,nd,rd,ld,dd,od,md,vd,cd,ud,fd,bd,pd,gd,Ed,wd,hd,xd,zd,Ld,Md,Rd,Sd,Dd,yd,Vd,Ad,Td,Wd,Ud,Id,Bd,Od,Fd,qd,Xd,Cd,Hd,kd,Nd,Zd,Yd,Pd,jd,Kd,Gd,Qd,Jd,$d,eo,io,to,_o,so,ao,no,ro,lo,oo,mo,vo,co,uo,fo,bo,po,go,Eo,wo,ho,xo,zo,Lo,Mo,Ro,So,Do,yo,Vo,Ao,To,Wo,Uo,Io,Bo,Oo,Fo,qo,Xo,Co,Ho,ko,No,Zo,Yo,Po,jo,Ko,Go,Qo,Jo,$o,em,im,tm,_m,sm,am,nm,rm,lm,dm,om,mm,vm,cm,um,fm,bm,pm,gm,Em,wm,hm,xm,zm,Lm,Mm,Rm,Sm,Dm,ym,Vm,Am,Tm,Wm,Um,Im,Bm,Om,Fm,qm,Xm,Cm,Hm,km,Nm,Zm,Ym,Pm,jm,Km,Gm,Qm,Jm,$m,ev,iv,tv,_v,sv,av,nv,rv,lv,dv,ov,mv,vv,cv,uv,fv,bv,pv,gv,Ev,wv,hv,xv,zv,Lv,Mv,Rv,Sv,Dv,yv,Vv,Av,Tv,Wv,Uv,Iv,Bv,Ov,Fv,qv,Xv,Cv,Hv,kv,Nv,Zv,Yv,Pv,jv,Kv,Gv,Qv,Jv,$v,ec,ic,tc,_c,sc,ac,nc,rc,lc,dc,oc,mc,vc,cc,uc,fc,bc,pc=["children","className","feedback","feedbackTimeout","onAnimationEnd","onClick"];function gc(e){var t,_=e.children,s=e.className,a=e.feedback,n=e.feedbackTimeout,r=e.onAnimationEnd,l=e.onClick,d=B(e,pc),o=q((0,i.useState)(""),2),m=o[0],v=o[1],c=Z(),u=k()(s,"".concat(c,"--copy"),(A(t={},"".concat(c,"--copy-btn--animating"),m),A(t,"".concat(c,"--copy-btn--").concat(m),m),t)),f=(0,i.useCallback)(zl()((function(){v("fade-out")}),n),[n]),b=(0,i.useCallback)((function(){v("fade-in"),f()}),[f]),p=function(e){"hide-feedback"===e.animationName&&v("")};return(0,i.useEffect)((function(){return function(){f.cancel()}}),[f]),L("enable-v11-release")?i.createElement(Bl,T({align:"bottom",className:u,label:m?a:d["aria-label"],onClick:Ll([l,b]),onAnimationEnd:Ll([r,p])},d,{"aria-live":"polite","aria-label":!_&&(m?a:d["aria-label"])||null}),_):i.createElement("button",T({type:"button",className:u,onClick:Ll([l,b]),onAnimationEnd:Ll([r,p])},d,{"aria-live":"polite","aria-label":!_&&(m?a:d["aria-label"])||null}),_,m?a:d["aria-label"],i.createElement("span",{"aria-hidden":"true",className:"".concat(c,"--assistive-text ").concat(c,"--copy-btn__feedback")},a))}gc.propTypes={children:P().node,className:P().string,feedback:P().string,feedbackTimeout:P().number,onAnimationEnd:P().func,onClick:P().func},gc.defaultProps={feedback:"Copied!",feedbackTimeout:2e3,onClick:function(){}};var Ec=["children","size"],wc=["children","size"],hc=["children","size"],xc=["children","size"],zc=["children","size"],Lc=["children","size"],Mc=["children","size"],Rc=["children","size"],Sc=["children","size"],Dc=["children","size"],yc=["children","size"],Vc=["children","size"],Ac=["children","size"],Tc=["children","size"],Wc=["children","size"],Uc=["children","size"],Ic=["children","size"],Bc=["children","size"],Oc=["children","size"],Fc=["children","size"],qc=["children","size"],Xc=["children","size"],Cc=["children","size"],Hc=["children","size"],kc=["children","size"],Nc=["children","size"],Zc=["children","size"],Yc=["children","size"],Pc=["children","size"],jc=["children","size"],Kc=["children","size"],Gc=["children","size"],Qc=["children","size"],Jc=["children","size"],$c=["children","size"],eu=["children","size"],iu=["children","size"],tu=["children","size"],_u=["children","size"],su=["children","size"],au=["children","size"],nu=["children","size"],ru=["children","size"],lu=["children","size"],du=["children","size"],ou=["children","size"],mu=["children","size"],vu=["children","size"],cu=["children","size"],uu=["children","size"],fu=["children","size"],bu=["children","size"],pu=["children","size"],gu=["children","size"],Eu=["children","size"],wu=["children","size"],hu=["children","size"],xu=["children","size"],zu=["children","size"],Lu=["children","size"],Mu=["children","size"],Ru=["children","size"],Su=["children","size"],Du=["children","size"],yu=["children","size"],Vu=["children","size"],Au=["children","size"],Tu=["children","size"],Wu=["children","size"],Uu=["children","size"],Iu=["children","size"],Bu=["children","size"],Ou=["children","size"],Fu=["children","size"],qu=["children","size"],Xu=["children","size"],Cu=["children","size"],Hu=["children","size"],ku=["children","size"],Nu=["children","size"],Zu=["children","size"],Yu=["children","size"],Pu=["children","size"],ju=["children","size"],Ku=["children","size"],Gu=["children","size"],Qu=["children","size"],Ju=["children","size"],$u=["children","size"],ef=["children","size"],tf=["children","size"],_f=["children","size"],sf=["children","size"],af=["children","size"],nf=["children","size"],rf=["children","size"],lf=["children","size"],df=["children","size"],of=["children","size"],mf=["children","size"],vf=["children","size"],cf=["children","size"],uf=["children","size"],ff=["children","size"],bf=["children","size"],pf=["children","size"],gf=["children","size"],Ef=["children","size"],wf=["children","size"],hf=["children","size"],xf=["children","size"],zf=["children","size"],Lf=["children","size"],Mf=["children","size"],Rf=["children","size"],Sf=["children","size"],Df=["children","size"],yf=["children","size"],Vf=["children","size"],Af=["children","size"],Tf=["children","size"],Wf=["children","size"],Uf=["children","size"],If=["children","size"],Bf=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ec);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ol||(Ol=i.createElement("path",{d:"M29,26a2.97,2.97,0,0,0-1.8551.6607L25,25.4224V23.8157a3,3,0,1,0-2,0v1.6067l-2.1449,1.2383A2.97,2.97,0,0,0,19,26a3.02,3.02,0,1,0,2.9254,2.3525L24,27.1548l2.0746,1.1977A2.9978,2.9978,0,1,0,29,26ZM19,30a1,1,0,1,1,1-1A1.0006,1.0006,0,0,1,19,30Zm5-10a1,1,0,1,1-1,1A1.0009,1.0009,0,0,1,24,20Zm5,10a1,1,0,1,1,1-1A1.0006,1.0006,0,0,1,29,30Z"})),Fl||(Fl=i.createElement("circle",{cx:"7",cy:"20",r:"2"})),ql||(ql=i.createElement("path",{d:"M14,20a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,14,20Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,14,14Z"})),Xl||(Xl=i.createElement("circle",{cx:"21",cy:"12",r:"2"})),Cl||(Cl=i.createElement("path",{d:"M13.0205,28.2715,3,22.4258V9.5742L14,3.1577,25.4961,9.8638l1.0078-1.7276-12-7a1,1,0,0,0-1.0078,0l-12,7A.9994.9994,0,0,0,1,9V23a1.0008,1.0008,0,0,0,.4961.8643L12.0127,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hl||(Hl=i.createElement("path",{d:"M25.8218,10.124a9.9991,9.9991,0,0,0-19.6435,0A7.4964,7.4964,0,0,0,7.5,25H8V23H7.5a5.4961,5.4961,0,0,1-.3769-10.9795l.8364-.0571.09-.8335a7.9979,7.9979,0,0,1,15.9013,0l.09.8335.8364.0571A5.4961,5.4961,0,0,1,24.5,23H24v2h.5a7.4964,7.4964,0,0,0,1.3218-14.876Z"})),kl||(kl=i.createElement("path",{d:"M23,22V20H20.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,17,16.1011V14H15v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,11.1011,20H9v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,15,25.8989V28h2V25.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,20.8989,22Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,16,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nl||(Nl=i.createElement("path",{d:"M30.0005,15.5005a6.5324,6.5324,0,0,0-5.1992-6.3638,8.9943,8.9943,0,0,0-17.6006,0,6.5321,6.5321,0,0,0-5.2,6.3638,6.4543,6.4543,0,0,0,1.6887,4.35A5.9829,5.9829,0,0,0,8,30H19a5.9764,5.9764,0,0,0,5.6094-8.1016A6.5051,6.5051,0,0,0,30.0005,15.5005ZM19,28H8a3.9925,3.9925,0,0,1-.6731-7.9292L7.99,19.958l.1458-.6562a5.496,5.496,0,0,1,10.7294,0l.1458.6562.6626.1128A3.9925,3.9925,0,0,1,19,28Zm4.5-8h-.0554a5.9562,5.9562,0,0,0-2.7959-1.7564,7.4952,7.4952,0,0,0-14.2984,0,5.9877,5.9877,0,0,0-1.0315.4073A4.4446,4.4446,0,0,1,4,15.5005a4.5171,4.5171,0,0,1,4.144-4.481l.8155-.0639.0991-.812a6.9938,6.9938,0,0,1,13.8838,0l.0986.812.8154.0639a4.4975,4.4975,0,0,1-.3564,8.981Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zl||(Zl=i.createElement("path",{d:"M20 17V15a2 2 0 00-2-2H10a2 2 0 00-2 2v2a2 2 0 002 2h8A2 2 0 0020 17zM10 15h8v2H10zM23.42 24.48A2 2 0 0021 23.06l-7.73 2.07a2 2 0 00-1.42 2.44h0l.52 1.93A2 2 0 0014.27 31a3 3 0 00.52-.07l7.73-2.07h0a2 2 0 001.41-2.45zM14.27 29l-.51-1.94L21.48 25 22 26.92zM13.24 6.86L21 8.93h0a2.24 2.24 0 00.51.07 2 2 0 001.94-1.48L24 5.58a2 2 0 00-1.41-2.45L14.79 1.06a2 2 0 00-2.45 1.41h0l-.52 1.93a2 2 0 001.42 2.44zm1-3.86L22 5.07 21.48 7 13.76 4.93zM14 21H16V23H14zM14 9H16V11H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yl||(Yl=i.createElement("path",{d:"M31 16L24 23 22.59 21.59 28.17 16 22.59 10.41 24 9 31 16zM1 16L8 9 9.41 10.41 3.83 16 9.41 21.59 8 23 1 16z"})),Pl||(Pl=i.createElement("path",{d:"M5.91 15H26.080000000000002V17H5.91z",transform:"rotate(-75 15.996 16)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jl||(jl=i.createElement("path",{d:"M17.713 13.471L19.576 6.518 17.645 6 16.08 11.838 17.713 13.471zM24.207 19.965L25.621 21.379 31 16 24 9 22.586 10.414 28.172 16 24.207 19.965zM30 28.586L3.414 2 2 3.414 7.793 9.207 1 16 8 23 9.414 21.586 3.828 16 9.207 10.621 14.884 16.298 12.423 25.482 14.355 26 16.517 17.931 28.586 30 30 28.586z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kl||(Kl=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM30 10L24 4 22.586 5.414 27.172 10 22.586 14.586 24 16 30 10z"})),Gl||(Gl=i.createElement("path",{d:"M8.944 9.001H24.974000000000004V11.001H8.944z",transform:"rotate(-74.995 16.96 10)"})),Ql||(Ql=i.createElement("path",{d:"M4 10L10 4 11.414 5.414 6.828 10 11.414 14.586 10 16 4 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jl||(Jl=i.createElement("circle",{cx:"25",cy:"20",r:"1"})),$l||($l=i.createElement("path",{d:"M19.4141 30H15V25.5857l5.0337-5.0337A4.6069 4.6069 0 0120 20a5 5 0 114.4478 4.9663zM17 28h1.5859l5.2061-5.2063.5395.1238a3.0351 3.0351 0 10-2.249-2.2488l.1236.5393L17 26.4143zM6 8H8V16H6zM2 8H4V16H2zM18 8H20V14H18zM14 16H12a2 2 0 01-2-2V10a2 2 0 012-2h2a2 2 0 012 2v4A2 2 0 0114 16zm-2-2h2V10H12zM2 18H4V26H2zM14 18H16V22H14zM10 26H8a2 2 0 01-2-2V20a2 2 0 012-2h2a2 2 0 012 2v4A2 2 0 0110 26zM8 24h2V20H8zM2 2H4V6H2zM14 2H16V6H14zM18 2H20V6H18zM10 6H8A2 2 0 016 4V2H8V4h2V2h2V4A2 2 0 0110 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ed||(ed=i.createElement("path",{d:"M30,13A11,11,0,0,0,19,2H11a9,9,0,0,0-9,9v3a5,5,0,0,0,5,5H8.1A5,5,0,0,0,13,23h1.38l4,7,1.73-1-4-6.89A2,2,0,0,0,14.38,21H13a3,3,0,0,1,0-6h1V13H13a5,5,0,0,0-4.9,4H7a3,3,0,0,1-3-3V12H6A3,3,0,0,0,9,9V8H7V9a1,1,0,0,1-1,1H4.08A7,7,0,0,1,11,4h6V6a1,1,0,0,1-1,1H14V9h2a3,3,0,0,0,3-3V4a9,9,0,0,1,8.05,5H26a3,3,0,0,0-3,3v1h2V12a1,1,0,0,1,1-1h1.77A8.76,8.76,0,0,1,28,13v1a5,5,0,0,1-5,5H20v2h3a7,7,0,0,0,3-.68V21a3,3,0,0,1-3,3H22v2h1a5,5,0,0,0,5-5V18.89A7,7,0,0,0,30,14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),id||(id=i.createElement("path",{d:"M6 21V20H4v1a7 7 0 007 7h3V26H11A5 5 0 016 21zM24 11v1h2V11a7 7 0 00-7-7H16V6h3A5 5 0 0124 11zM11 11H5a3 3 0 00-3 3v2H4V14a1 1 0 011-1h6a1 1 0 011 1v2h2V14A3 3 0 0011 11zM8 10A4 4 0 104 6 4 4 0 008 10zM8 4A2 2 0 116 6 2 2 0 018 4zM27 25H21a3 3 0 00-3 3v2h2V28a1 1 0 011-1h6a1 1 0 011 1v2h2V28A3 3 0 0027 25zM20 20a4 4 0 104-4A4 4 0 0020 20zm6 0a2 2 0 11-2-2A2 2 0 0126 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),td||(td=i.createElement("path",{d:"M30,15H28V7H13V5H28a2.0023,2.0023,0,0,1,2,2Z"})),_d||(_d=i.createElement("path",{d:"M25,20H23V12H8V10H23a2.0023,2.0023,0,0,1,2,2Z"})),sd||(sd=i.createElement("path",{d:"M18,27H4a2.0023,2.0023,0,0,1-2-2V17a2.0023,2.0023,0,0,1,2-2H18a2.0023,2.0023,0,0,1,2,2v8A2.0023,2.0023,0,0,1,18,27ZM4,17v8H18.0012L18,17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ad||(ad=i.createElement("path",{d:"M14 25H28V27H14zM7.17 26L4.59 28.58 6 30 10 26 6 22 4.58 23.41 7.17 26zM14 15H28V17H14zM7.17 16L4.59 18.58 6 20 10 16 6 12 4.58 13.41 7.17 16zM14 5H28V7H14zM7.17 6L4.59 8.58 6 10 10 6 6 2 4.58 3.41 7.17 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ac);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nd||(nd=i.createElement("circle",{cx:"10",cy:"12",r:"2"})),rd||(rd=i.createElement("circle",{cx:"16",cy:"9",r:"2"})),ld||(ld=i.createElement("circle",{cx:"22",cy:"12",r:"2"})),dd||(dd=i.createElement("circle",{cx:"23",cy:"18",r:"2"})),od||(od=i.createElement("circle",{cx:"19",cy:"23",r:"2"})),md||(md=i.createElement("path",{d:"M16.54,2A14,14,0,0,0,2,16a4.82,4.82,0,0,0,6.09,4.65l1.12-.31A3,3,0,0,1,13,23.24V27a3,3,0,0,0,3,3A14,14,0,0,0,30,15.46,14.05,14.05,0,0,0,16.54,2Zm8.11,22.31A11.93,11.93,0,0,1,16,28a1,1,0,0,1-1-1V23.24a5,5,0,0,0-5-5,5.07,5.07,0,0,0-1.33.18l-1.12.31A2.82,2.82,0,0,1,4,16,12,12,0,0,1,16.47,4,12.18,12.18,0,0,1,28,15.53,11.89,11.89,0,0,1,24.65,24.32Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vd||(vd=i.createElement("path",{d:"M26,4H6A2.0025,2.0025,0,0,0,4,6V26a2.0025,2.0025,0,0,0,2,2H26a2.0025,2.0025,0,0,0,2-2V6A2.0025,2.0025,0,0,0,26,4ZM6,26,26,6V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cd||(cd=i.createElement("path",{d:"M24 4H26V28H24zM18 6V26H14V6h4m0-2H14a2 2 0 00-2 2V26a2 2 0 002 2h4a2 2 0 002-2V6a2 2 0 00-2-2zM6 4H8V28H6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ud||(ud=i.createElement("path",{d:"M30 3.41L28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41z"})),fd||(fd=i.createElement("path",{d:"M24 14V28H18V6H16V28a2.0023 2.0023 0 002 2h6a2.0023 2.0023 0 002-2V14zM10 30H4a2.0021 2.0021 0 01-2-2V8A2.0021 2.0021 0 014 6h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0110 30zM4 8V28h6V8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ic);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bd||(bd=i.createElement("path",{d:"M28 30H22a2.0021 2.0021 0 01-2-2V10a2.0021 2.0021 0 012-2h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0128 30zM22 10V28h6V10zM16 9L21.586 3.414 20.172 2 16 6.172 11.828 2 10.414 3.414 16 9zM10 30H4a2.0021 2.0021 0 01-2-2V10A2.0021 2.0021 0 014 8h6a2.0021 2.0021 0 012 2V28A2.0021 2.0021 0 0110 30zM4 10V28h6V10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pd||(pd=i.createElement("path",{d:"M30,10V2H22V5H17a2.0023,2.0023,0,0,0-2,2v8H10V12H2v8h8V17h5v8a2.0023,2.0023,0,0,0,2,2h5v3h8V22H22v3H17V17h5v3h8V12H22v3H17V7h5v3ZM8,18H4V14H8Zm16,6h4v4H24Zm0-10h4v4H24ZM24,4h4V8H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gd||(gd=i.createElement("path",{d:"M30,15H21.91A5.9925,5.9925,0,0,0,10.09,15H2v2h8.09A5.9925,5.9925,0,0,0,21.91,17H30ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ed||(Ed=i.createElement("path",{d:"M28 17H18a2.0025 2.0025 0 00-2 2v6a2.0025 2.0025 0 002 2h4V25H18V19H28v6H25.4648l-2.5937 3.8906L24.5352 30l2-3H28a2.0025 2.0025 0 002-2V19A2.0025 2.0025 0 0028 17zM8.6667 24.1086l.8614-.8615a.8334.8334 0 01.8988-.1844l1.0493.42A.8334.8334 0 0112 24.2561v1.9082a.8334.8334 0 01-.8786.8341c-7.3546-.4578-8.84-6.6863-9.1158-9.0723A.8316.8316 0 012.8343 17H4.7085a.8335.8335 0 01.7737.5238l.42 1.0493a.8332.8332 0 01-.1845.8988l-.8614.8614A4.5267 4.5267 0 008.6667 24.1086zM21 9H28V11H21zM21 5H30V7H21zM17 6L14 8.2V6a2.0024 2.0024 0 00-2-2H4A2.0024 2.0024 0 002 6v6a2.0024 2.0024 0 002 2h8a2.0024 2.0024 0 002-2V9.8L17 12zM4 12V6h8v6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wd||(wd=i.createElement("path",{d:"M28,6H18V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V24a2,2,0,0,0,2,2H14v2a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6ZM4,15h6.17L7.59,17.59,9,19l5-5L9,9,7.59,10.41,10.17,13H4V4H16V24H4ZM16,28V26a2,2,0,0,0,2-2V8H28v9H21.83l2.58-2.59L23,13l-5,5,5,5,1.41-1.41L21.83,19H28v9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hd||(hd=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12,12,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z"})),xd||(xd=i.createElement("path",{d:"M23,10.41,21.59,9l-4.3,4.3a3,3,0,0,0-4,4L9,21.59,10.41,23l4.3-4.3a3,3,0,0,0,4-4ZM17,16a1,1,0,1,1-1-1A1,1,0,0,1,17,16Z"})),zd||(zd=i.createElement("circle",{cx:"16",cy:"7.5",r:"1.5"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ld||(Ld=i.createElement("path",{d:"M25.82,10H30V8H25.82a3,3,0,0,0-5.64,0H13V5H5V8H2v2H5v3h8V10h7.18A3,3,0,0,0,22,11.82v7.32A4,4,0,0,0,19.14,22H2v2H19.14a4,4,0,0,0,7.72,0H30V22H26.86A4,4,0,0,0,24,19.14V11.82A3,3,0,0,0,25.82,10ZM11,11H7V7h4ZM25,23a2,2,0,1,1-2-2A2,2,0,0,1,25,23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Md||(Md=i.createElement("path",{d:"M20.8851,19.4711a5.9609,5.9609,0,0,0,0-6.9422L23,10.4141l1.293,1.2929a.9995.9995,0,0,0,1.414,0l4-4a.9994.9994,0,0,0,0-1.414l-4-4a.9994.9994,0,0,0-1.414,0l-4,4a.9994.9994,0,0,0,0,1.414L21.5859,9l-2.1148,2.1149a5.9609,5.9609,0,0,0-6.9422,0L10,8.5859V2H2v8H8.5859l2.529,2.5289a5.9609,5.9609,0,0,0,0,6.9422L9,21.5859,7.707,20.293a.9994.9994,0,0,0-1.414,0l-4,4a.9994.9994,0,0,0,0,1.414l4,4a.9995.9995,0,0,0,1.414,0l4-4a.9994.9994,0,0,0,0-1.414L10.4141,23l2.1148-2.1149a5.9609,5.9609,0,0,0,6.9422,0L22,23.4141V30h8V22H23.4141ZM25,4.4141,27.5859,7,25,9.5859,22.4141,7ZM7,27.5859,4.4141,25,7,22.4141,9.5859,25ZM8,8H4V4H8Zm4,8a4,4,0,1,1,4,4A4.0045,4.0045,0,0,1,12,16Zm12,8h4v4H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rd||(Rd=i.createElement("path",{d:"M10.343 10.343H21.657V21.657H10.343z",transform:"rotate(-45 16 16)"})),Sd||(Sd=i.createElement("path",{d:"M29.3906,14.5269,17.4731,2.6094a2.0852,2.0852,0,0,0-2.9462,0L2.6094,14.5269a2.0852,2.0852,0,0,0,0,2.9462L14.5269,29.3906a2.0852,2.0852,0,0,0,2.9462,0L29.3906,17.4731a2.0852,2.0852,0,0,0,0-2.9462ZM16,28.0356,3.9646,16,16,3.9644,28.0356,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dd||(Dd=i.createElement("path",{d:"M10.343 10.343H21.657V21.657H10.343z",transform:"rotate(-45 16 16)"})),yd||(yd=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12.0136,12.0136,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vd||(Vd=i.createElement("path",{d:"M23,16a7,7,0,0,0-4.18,1.39L14.6,13.17A6.86,6.86,0,0,0,16,9a7,7,0,1,0-2.81,5.59l4.21,4.22A7,7,0,1,0,23,16ZM4,9a5,5,0,1,1,5,5A5,5,0,0,1,4,9Z",transform:"translate(0 .01)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ad||(Ad=i.createElement("path",{d:"M28,7H13.8281l3.586-3.5859L16,2,10,8l6,6,1.4141-1.4141L13.8281,9H28V20H11.8989A5.0145,5.0145,0,0,0,8,16.1011V2H6V16.1011a5,5,0,0,0,0,9.7978V30H8V25.8989A5.0145,5.0145,0,0,0,11.8989,22H28a2.0023,2.0023,0,0,0,2-2V9A2.0023,2.0023,0,0,0,28,7ZM7,24a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,7,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Td||(Td=i.createElement("path",{d:"M24,10l-1.4141,1.4141L26.1719,15H11.8989A5.0145,5.0145,0,0,0,8,11.1011V2H6v9.1011a5,5,0,0,0,0,9.7978V30H8V20.8989A5.0145,5.0145,0,0,0,11.8989,17h14.273l-3.586,3.5859L24,22l6-6ZM7,19a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,7,19Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wd||(Wd=i.createElement("path",{d:"M28 2H30V30H28zM20 10l-1.4141 1.4141L22.1719 15H11.8989a5 5 0 100 2h10.273l-3.586 3.5859L20 22l6-6zM7 19a3 3 0 113-3A3.0033 3.0033 0 017 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ud||(Ud=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM30 14L21.83 14 24.41 16.59 23 18 18 13 23 8 24.41 9.41 21.83 12 30 12 30 14z"})),Id||(Id=i.createElement("path",{d:"M28,20v8H22V20H20v8H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bd||(Bd=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM18 14L26.17 14 23.59 16.59 25 18 30 13 25 8 23.59 9.41 26.17 12 18 12 18 14z"})),Od||(Od=i.createElement("path",{d:"M28,20v8H22V20H20v8H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fd||(Fd=i.createElement("path",{d:"M8 8H10V12H8zM8 14H10V18H8zM14 8H16V12H14zM14 14H16V18H14zM8 20H10V24H8zM14 20H16V24H14zM30 22L21.83 22 24.41 24.59 23 26 18 21 23 16 24.41 17.41 21.83 20 30 20 30 22zM19 12L27.17 12 24.59 14.59 26 16 31 11 26 6 24.59 7.41 27.17 10 19 10 19 12z"})),qd||(qd=i.createElement("path",{d:"M28,26v2H4V4H20V6h2V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V30H30V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jc);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xd||(Xd=i.createElement("path",{d:"M15 12H17V30H15zM11.33 18.22a7 7 0 010-10.44l1.34 1.49a5 5 0 000 7.46zM20.67 18.22l-1.34-1.49a5 5 0 000-7.46l1.34-1.49a7 7 0 010 10.44z"})),Cd||(Cd=i.createElement("path",{d:"M8.4 21.8a11 11 0 010-17.6L9.6 5.8a9 9 0 000 14.4zM23.6 21.8l-1.2-1.6a9 9 0 000-14.4l1.2-1.6a11 11 0 010 17.6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$c);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hd||(Hd=i.createElement("path",{d:"M26,13a8.9089,8.9089,0,0,1-2.5249,6.2339l1.4133,1.4131A10.9795,10.9795,0,0,0,23.6006,4.2l-1.2012,1.6A8.932,8.932,0,0,1,26,13Z"})),kd||(kd=i.createElement("path",{d:"M21 13a5.0022 5.0022 0 01-.9023 2.8564l1.4277 1.4278a6.9831 6.9831 0 00-.8584-9.5015l-1.334 1.49A5.0077 5.0077 0 0121 13zM30 28.5859L3.4143 2 2 3.4141l3.71 3.71A10.9824 10.9824 0 008.3994 21.8008l1.2012-1.6A8.9678 8.9678 0 017.1714 8.5854l2.1963 2.1963a6.9664 6.9664 0 001.9648 7.4351l1.334-1.49A5.0072 5.0072 0 0111 13a4.8854 4.8854 0 01.0393-.5464L15 16.4141V30h2V18.4141L28.5857 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,eu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nd||(Nd=i.createElement("path",{d:"M29.34 16.06a1.0007 1.0007 0 00-1.1084.3L24.46 20.8857l-5.4355-.9882-3.602-8.9512A3.014 3.014 0 0012.6138 9h-4.06A3.0018 3.0018 0 007.01 9.4277L2 12.4336v6.4009l5 .9092V30H9V20.1074l3.5652.648L14 24.2V30h2V23.8l-1.0911-2.6182L22.99 22.6509 18.2319 28.36A1 1 0 0019 30H29a1 1 0 001-1V17A1 1 0 0029.34 16.06zM4 17.1655V13.5664l3-1.8v5.9448zm5 .9092V11h3.6138a1.0141 1.0141 0 01.9453.6709l3.14 7.8037zM28 28H21.1353L28 19.7617zM12.5 8A3.5 3.5 0 1116 4.5 3.5042 3.5042 0 0112.5 8zm0-5A1.5 1.5 0 1014 4.5 1.5017 1.5017 0 0012.5 3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,iu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zd||(Zd=i.createElement("path",{d:"M17,13V6H8V22H24V13ZM10,8h5v5H10Zm0,7h5v5H10Zm12,5H17V15h5Z"})),Yd||(Yd=i.createElement("path",{d:"M28 11H19V2h9zM21 9h5V4H21zM28 20H26v2h2v6H4V22H6V20H4a2.0024 2.0024 0 00-2 2v6a2.0024 2.0024 0 002 2H28a2.0024 2.0024 0 002-2V22A2.0024 2.0024 0 0028 20z"})),Pd||(Pd=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jd||(jd=i.createElement("path",{d:"M27,22V17a2.0023,2.0023,0,0,0-2-2H17V10h3a2.0023,2.0023,0,0,0,2-2V4a2.0023,2.0023,0,0,0-2-2H12a2.0023,2.0023,0,0,0-2,2V8a2.0023,2.0023,0,0,0,2,2h3v5H7a2.0023,2.0023,0,0,0-2,2v5H2v8h8V22H7V17h8v5H12v8h8V22H17V17h8v5H22v8h8V22ZM12,4h8V8H12ZM8,28H4V24H8Zm10,0H14V24h4Zm10,0H24V24h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_u);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kd||(Kd=i.createElement("path",{d:"M28,12H20V4h8Zm-6-2h4V6H22Z"})),Gd||(Gd=i.createElement("path",{d:"M17,15V9H9V23H23V15Zm-6-4h4v4H11Zm4,10H11V17h4Zm6,0H17V17h4Z"})),Qd||(Qd=i.createElement("path",{d:"M26,28H6a2.0023,2.0023,0,0,1-2-2V6A2.0023,2.0023,0,0,1,6,4H16V6H6V26H26V16h2V26A2.0023,2.0023,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,su);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jd||(Jd=i.createElement("circle",{cx:"21",cy:"21",r:"2"})),$d||($d=i.createElement("circle",{cx:"7",cy:"7",r:"2"})),eo||(eo=i.createElement("path",{d:"M27,31a4,4,0,1,1,4-4A4.0118,4.0118,0,0,1,27,31Zm0-6a2,2,0,1,0,2,2A2.0059,2.0059,0,0,0,27,25Z"})),io||(io=i.createElement("path",{d:"M30,16A14.0412,14.0412,0,0,0,16,2,13.0426,13.0426,0,0,0,9.2,3.8l1.1,1.7a24.4254,24.4254,0,0,1,2.4-1A25.1349,25.1349,0,0,0,10,15H4a11.1489,11.1489,0,0,1,1.4-4.7L3.9,9A13.8418,13.8418,0,0,0,2,16,13.9983,13.9983,0,0,0,16,30a13.3656,13.3656,0,0,0,5.2-1l-.6-1.9a11.4416,11.4416,0,0,1-5.2.9h0A21.0713,21.0713,0,0,1,12,17H29.9A3.4019,3.4019,0,0,0,30,16ZM12.8,27.6h0a13.02,13.02,0,0,1-5.3-3.1A12.5053,12.5053,0,0,1,4,17h6A25.0022,25.0022,0,0,0,12.8,27.6ZM12,15A21.4461,21.4461,0,0,1,15.3,4h1.4A21.4461,21.4461,0,0,1,20,15Zm10,0A23.2777,23.2777,0,0,0,19.2,4.4,12.0919,12.0919,0,0,1,27.9,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,au);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),to||(to=i.createElement("circle",{cx:"16",cy:"19",r:"2"})),_o||(_o=i.createElement("path",{d:"M23.7769,18.4785A8.64,8.64,0,0,0,16,13a8.64,8.64,0,0,0-7.7769,5.4785L8,19l.2231.5215A8.64,8.64,0,0,0,16,25a8.64,8.64,0,0,0,7.7769-5.4785L24,19ZM16,23a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,23Z"})),so||(so=i.createElement("path",{d:"M27,3H5A2,2,0,0,0,3,5V27a2,2,0,0,0,2,2H27a2,2,0,0,0,2-2V5A2,2,0,0,0,27,3ZM5,5H27V9H5ZM5,27V11H27V27Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ao||(ao=i.createElement("path",{d:"M10 28a1 1 0 01-1-1V5a1 1 0 011.501-.8652l19 11a1 1 0 010 1.73l-19 11A.9975.9975 0 0110 28zM11 6.7344V25.2656L27 16zM4 4H6V28H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ru);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),no||(no=i.createElement("path",{d:"M10 28a1 1 0 01-1-1V5a1 1 0 011.501-.8652l19 11a1 1 0 010 1.73l-19 11A.9975.9975 0 0110 28zM4 4H6V28H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ro||(ro=i.createElement("path",{d:"M7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.526 11.526 0 0123 25.7zM27.4 19.7l1.9.6A15.4747 15.4747 0 0030 16H28A11.4756 11.4756 0 0127.4 19.7zM29.2 11.6a14.4029 14.4029 0 00-2-3.9L25.6 8.9a12.8867 12.8867 0 011.7 3.3zM24.1 4.6a14.4029 14.4029 0 00-3.9-2l-.6 1.9a12.8867 12.8867 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.4756 11.4756 0 0116 28v2A21.4206 21.4206 0 0020.3 29.3zM15.4023 24.248a11.9488 11.9488 0 00-1.7182-3.3354L15.2974 19.73a13.9486 13.9486 0 012.0044 3.893zM11.02 18.2668a11.9215 11.9215 0 00-3.3467-1.6943l.6114-1.9043a13.9242 13.9242 0 013.9072 1.978z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,du);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lo||(lo=i.createElement("path",{d:"M16 30V28A12.0021 12.0021 0 0019.6924 4.5786l.6152-1.9033A14.0022 14.0022 0 0116 30zM7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7z"})),oo||(oo=i.createElement("path",{d:"M15.4023 24.248a11.9488 11.9488 0 00-1.7182-3.3354L15.2974 19.73a13.9486 13.9486 0 012.0044 3.893zM11.02 18.2668a11.9215 11.9215 0 00-3.3467-1.6943l.6114-1.9043a13.9242 13.9242 0 013.9072 1.978z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ou);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mo||(mo=i.createElement("path",{d:"M7.7 4.7a14.7029 14.7029 0 00-3 3.1L6.3 9A13.2634 13.2634 0 018.9 6.3zM4.6 12.3l-1.9-.6A12.5111 12.5111 0 002 16H4A11.4756 11.4756 0 014.6 12.3zM2.7 20.4a14.4029 14.4029 0 002 3.9l1.6-1.2a12.8867 12.8867 0 01-1.7-3.3zM7.8 27.3a14.4029 14.4029 0 003.9 2l.6-1.9A12.8867 12.8867 0 019 25.7zM11.7 2.7l.6 1.9A11.4756 11.4756 0 0116 4V2A12.5111 12.5111 0 0011.7 2.7zM24.2 27.3a15.18 15.18 0 003.1-3.1L25.7 23A11.526 11.526 0 0123 25.7zM27.4 19.7l1.9.6A15.4747 15.4747 0 0030 16H28A11.4756 11.4756 0 0127.4 19.7zM29.2 11.6a14.4029 14.4029 0 00-2-3.9L25.6 8.9a12.8867 12.8867 0 011.7 3.3zM24.1 4.6a14.4029 14.4029 0 00-3.9-2l-.6 1.9a12.8867 12.8867 0 013.3 1.7zM20.3 29.3l-.6-1.9A11.4756 11.4756 0 0116 28v2A21.4206 21.4206 0 0020.3 29.3zM16 26A10 10 0 1126 16 10.0115 10.0115 0 0116 26zM16 8a8 8 0 108 8A8.0092 8.0092 0 0016 8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vo||(vo=i.createElement("path",{d:"M29.37,11.84a13.6,13.6,0,0,0-1.06-2.51A14.17,14.17,0,0,0,25.9,6.1a14,14,0,1,0,0,19.8,14.17,14.17,0,0,0,2.41-3.23,13.6,13.6,0,0,0,1.06-2.51,14,14,0,0,0,0-8.32ZM4,16A12,12,0,0,1,16,4V28A12,12,0,0,1,4,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),co||(co=i.createElement("path",{d:"M26.5 12H19a4 4 0 010-8h.0835A4.7864 4.7864 0 0123 2a4.9816 4.9816 0 014.6543 3.2034A3.4667 3.4667 0 0130 8.5 3.5041 3.5041 0 0126.5 12zM19 6a2 2 0 000 4h7.5A1.5017 1.5017 0 0028 8.5a1.4855 1.4855 0 00-1.2778-1.4739L26.061 6.927l-.1616-.6487a2.9568 2.9568 0 00-5.4873-.7121L20.1143 6zM23 14l-5 5 1.4141 1.4141L22 17.8325V24H16v2h6a2.0025 2.0025 0 002-2V17.8325l2.5874 2.583L28 19zM2 20H12V22H2zM2 24H12V26H2zM2 28H12V30H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uo||(uo=i.createElement("circle",{cx:"10",cy:"21",r:"2"})),fo||(fo=i.createElement("circle",{cx:"23",cy:"20",r:"2"})),bo||(bo=i.createElement("circle",{cx:"13",cy:"10",r:"2"})),po||(po=i.createElement("circle",{cx:"14",cy:"15",r:"1"})),go||(go=i.createElement("circle",{cx:"23",cy:"5",r:"2"})),Eo||(Eo=i.createElement("circle",{cx:"29",cy:"3",r:"1"})),wo||(wo=i.createElement("circle",{cx:"16",cy:"23",r:"1"})),ho||(ho=i.createElement("path",{d:"M16,30C8.3,30,2,23.7,2,16S8.3,2,16,2c0.1,0,0.2,0,0.3,0l1.4,0.1l-0.3,1.2c-0.1,0.4-0.2,0.9-0.2,1.3c0,2.8,2.2,5,5,5 c1,0,2-0.3,2.9-0.9l1.3,1.5c-0.4,0.4-0.6,0.9-0.6,1.4c0,1.3,1.3,2.4,2.7,1.9l1.2-0.5l0.2,1.3C30,14.9,30,15.5,30,16 C30,23.7,23.7,30,16,30z M15.3,4C9,4.4,4,9.6,4,16c0,6.6,5.4,12,12,12s12-5.4,12-12c0-0.1,0-0.3,0-0.4c-2.3,0.1-4.2-1.7-4.2-4 c0-0.1,0-0.1,0-0.2c-0.5,0.1-1,0.2-1.6,0.2c-3.9,0-7-3.1-7-7C15.2,4.4,15.2,4.2,15.3,4z"})),_)})).propTypes=da;var Of=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xo||(xo=i.createElement("path",{d:"M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"})),zo||(zo=i.createElement("path",{d:"M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z"})),_)}));Of.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lo||(Lo=i.createElement("path",{d:"M27.4,14.7l-6.1-6.1C21,8.2,20.5,8,20,8h-8c-1.1,0-2,0.9-2,2v18c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V16.1 C28,15.6,27.8,15.1,27.4,14.7z M20,10l5.9,6H20V10z M12,28V10h6v6c0,1.1,0.9,2,2,2h6l0,10H12z"})),Mo||(Mo=i.createElement("path",{d:"M6,18H4V4c0-1.1,0.9-2,2-2h14v2H6V18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ro||(Ro=i.createElement("path",{d:"M11.9474,19a4.9476,4.9476,0,0,1-3.4991-8.4465l5.1053-5.1043a4.9482,4.9482,0,0,1,6.9981,6.9976l-.5523.5526-1.4158-1.4129.5577-.5579a2.95,2.95,0,0,0-.0039-4.1653,3.02,3.02,0,0,0-4.17,0l-5.1047,5.104a2.9474,2.9474,0,0,0,0,4.1692,3.02,3.02,0,0,0,4.17,0l1.4143,1.4145A4.9176,4.9176,0,0,1,11.9474,19Z"})),So||(So=i.createElement("path",{d:"M19.9474,17a4.9476,4.9476,0,0,1-3.4991-8.4465l.5526-.5526,1.4143,1.4146-.5526.5523a2.9476,2.9476,0,0,0,0,4.1689,3.02,3.02,0,0,0,4.17,0c.26-.26,4.7293-4.7293,5.1053-5.1045a2.951,2.951,0,0,0,0-4.1687,3.02,3.02,0,0,0-4.17,0L21.5536,3.449a4.9483,4.9483,0,0,1,6.9981,6.9978c-.3765.376-4.844,4.8428-5.1038,5.1035A4.9193,4.9193,0,0,1,19.9474,17Z"})),Do||(Do=i.createElement("path",{d:"M24,30H4a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,4,6H8V8H4V28H24V18h2V28A2.0021,2.0021,0,0,1,24,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yo||(yo=i.createElement("path",{d:"M23,16c-.3374,0-.67.02-1,.0508V16C22,8.115,19.0435,2,16.5,2S11,8.115,11,16v5H6v3a6.0067,6.0067,0,0,0,6,6h3A11.0125,11.0125,0,0,0,26,19V16ZM13,16h2V14H13.0728a25.8942,25.8942,0,0,1,.5654-4H16V8H14.2c.81-2.4058,1.8149-3.7715,2.3-3.9863.66.2919,2.2842,2.7036,3.0654,6.9863H18v2h1.8442A29.1625,29.1625,0,0,1,20,16v.4263A11.0554,11.0554,0,0,0,13.79,21H13ZM12,28a4.0045,4.0045,0,0,1-4-4V23h4.7639A10.9033,10.9033,0,0,0,12,27Zm12-9a9.01,9.01,0,0,1-9,9H14V27a9.01,9.01,0,0,1,9-9h1Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vo||(Vo=i.createElement("path",{d:"M28,9H14V6H6v8H9V28h2V14h3V11H28ZM12,12H8V8h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Eu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ao||(Ao=i.createElement("circle",{cx:"15.5",cy:"11.5",r:"1.5"})),To||(To=i.createElement("circle",{cx:"20.5",cy:"15.5",r:"1.5"})),Wo||(Wo=i.createElement("circle",{cx:"16",cy:"16",r:"1"})),Uo||(Uo=i.createElement("circle",{cx:"16.5",cy:"20.5",r:"1.5"})),Io||(Io=i.createElement("circle",{cx:"11.5",cy:"16.5",r:"1.5"})),Bo||(Bo=i.createElement("path",{d:"M28,13v2H25.9492a9.9476,9.9476,0,0,0-2.2143-5.3213l1.4367-1.4365,1.4143,1.4145L28,8.2427,23.7578,4l-1.414,1.4141,1.414,1.414-1.437,1.4365A9.9464,9.9464,0,0,0,17,6.0508V4h2V2H13V4h2V6.0508A9.9464,9.9464,0,0,0,9.6792,8.2646L8.2422,6.8281l1.414-1.414L8.2422,4,4,8.2427l1.4141,1.414L6.8284,8.2422,8.2651,9.6787A9.9476,9.9476,0,0,0,6.0508,15H4V13H2v6H4V17H6.0508a9.9476,9.9476,0,0,0,2.2143,5.3213L6.8284,23.7578,5.4141,22.3433,4,23.7573,8.2422,28l1.414-1.4141-1.414-1.414,1.437-1.4365A9.9464,9.9464,0,0,0,15,25.9492V28H13v2h6V28H17V25.9492a9.9464,9.9464,0,0,0,5.3208-2.2138l1.437,1.4365-1.414,1.414L23.7578,28,28,23.7573l-1.4141-1.414-1.4143,1.4145-1.4367-1.4365A9.9476,9.9476,0,0,0,25.9492,17H28v2h2V13ZM16,24a8,8,0,1,1,8-8A8.0092,8.0092,0,0,1,16,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Oo||(Oo=i.createElement("path",{d:"M16,23a7,7,0,1,1,7-7A7.0078,7.0078,0,0,1,16,23Zm0-12a5,5,0,1,0,5,5A5.0057,5.0057,0,0,0,16,11Z"})),Fo||(Fo=i.createElement("path",{d:"M30,6.4141,28.5859,5l-3.35,3.35A12.0812,12.0812,0,0,0,23.65,6.7637L27,3.4141,25.5859,2,21.9766,5.6094A11.9792,11.9792,0,0,0,5.6094,21.9766L2,25.5859,3.4141,27l3.35-3.35A12.0812,12.0812,0,0,0,8.35,25.2363L5,28.5859,6.4141,30l3.6093-3.6094A11.9792,11.9792,0,0,0,26.3906,10.0234ZM16,26A10,10,0,1,1,26,16,10.0114,10.0114,0,0,1,16,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qo||(qo=i.createElement("path",{d:"M10 13H22V15H10zM10 18H22V20H10z"})),Xo||(Xo=i.createElement("path",{d:"M30,6.4141,28.5859,5l-3.35,3.35A12.0812,12.0812,0,0,0,23.65,6.7637L27,3.4141,25.5859,2,21.9766,5.6094A11.9792,11.9792,0,0,0,5.6094,21.9766L2,25.5859,3.4141,27l3.35-3.35A12.0812,12.0812,0,0,0,8.35,25.2363L5,28.5859,6.4141,30l3.6093-3.6094A11.9792,11.9792,0,0,0,26.3906,10.0234ZM16,26A10,10,0,1,1,26,16,10.0114,10.0114,0,0,1,16,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Co||(Co=i.createElement("path",{d:"M26,30H24V27H20a5.0055,5.0055,0,0,1-5-5V20.7207l-2.3162-.772a1,1,0,0,1-.5412-1.4631L15,13.7229V11a9.01,9.01,0,0,1,9-9h5V4H24a7.0078,7.0078,0,0,0-7,7v3a.9991.9991,0,0,1-.1426.5144l-2.3586,3.9312,1.8174.6057A1,1,0,0,1,17,20v2a3.0033,3.0033,0,0,0,3,3h5a1,1,0,0,1,1,1Z"})),Ho||(Ho=i.createElement("circle",{cx:"9",cy:"23",r:"1"})),ko||(ko=i.createElement("circle",{cx:"6",cy:"20",r:"1"})),No||(No=i.createElement("circle",{cx:"6",cy:"26",r:"1"})),Zo||(Zo=i.createElement("circle",{cx:"3",cy:"17",r:"1"})),Yo||(Yo=i.createElement("circle",{cx:"3",cy:"29",r:"1"})),Po||(Po=i.createElement("circle",{cx:"3",cy:"23",r:"1"})),jo||(jo=i.createElement("path",{d:"M19 12H23V14H19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ko||(Ko=i.createElement("path",{d:"M24,30H8a2.0023,2.0023,0,0,1-2-2V4A2.002,2.002,0,0,1,8,2H24a2.0023,2.0023,0,0,1,2,2V20.6182l-5-2.5-5,2.5V4H8V28H24V24h2v4A2.0027,2.0027,0,0,1,24,30ZM21,15.8818l3,1.5V4H18V17.3818Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Go||(Go=i.createElement("circle",{cx:"8",cy:"16",r:"2"})),Qo||(Qo=i.createElement("circle",{cx:"14",cy:"8",r:"2"})),Jo||(Jo=i.createElement("circle",{cx:"28",cy:"12",r:"2"})),$o||($o=i.createElement("circle",{cx:"21",cy:"18",r:"2"})),em||(em=i.createElement("path",{d:"M30,3.4141,28.5859,2,4,26.5859V2H2V28a2,2,0,0,0,2,2H30V28H5.4141ZM4,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),im||(im=i.createElement("path",{d:"M16 22a4 4 0 10-4-4A4 4 0 0016 22zm0-6a2 2 0 11-2 2A2 2 0 0116 16zM14 6H18V8H14z"})),tm||(tm=i.createElement("path",{d:"M24,2H8A2.002,2.002,0,0,0,6,4V28a2.0023,2.0023,0,0,0,2,2H24a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,24,2ZM20,28H12V26a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1Zm2,0V26a3,3,0,0,0-3-3H13a3,3,0,0,0-3,3v2H8V4H24V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ru);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),_m||(_m=i.createElement("path",{d:"M12.887 11.4727a5.9936 5.9936 0 00-8.36-8.3594zM3.113 4.5273a5.9936 5.9936 0 008.36 8.3594z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),sm||(sm=i.createElement("path",{d:"M12.887 11.4727a5.9936 5.9936 0 00-8.36-8.3594zM3.113 4.5273a5.9936 5.9936 0 008.36 8.3594z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Su);return"glyph"===a||"glyph"===a||"glyphpx"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),am||(am=i.createElement("path",{d:"M13 13L3 13 3 3 13 13z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),nm||(nm=i.createElement("path",{d:"M13 13L3 13 3 3 13 13z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Du);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rm||(rm=i.createElement("path",{d:"M25,20H23V9H12V7H23a2,2,0,0,1,2,2Z"})),lm||(lm=i.createElement("path",{d:"M9,23V2H7V7H2V9H7V23a2,2,0,0,0,2,2H23v5h2V25h5V23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dm||(dm=i.createElement("path",{d:"M26,13a4.0045,4.0045,0,0,0,4-4V6H27a3.979,3.979,0,0,0-2.7468,1.1064A6.0041,6.0041,0,0,0,19,4H16V7a6.0066,6.0066,0,0,0,6,6h1V26H11V21h1a4.0045,4.0045,0,0,0,4-4V14H13a3.979,3.979,0,0,0-2.7468,1.1064A6.0041,6.0041,0,0,0,5,12H2v3a6.0066,6.0066,0,0,0,6,6H9v5H2v2H30V26H25V13Zm-1-3a2.002,2.002,0,0,1,2-2h1V9a2.002,2.002,0,0,1-2,2H25ZM11,18a2.002,2.002,0,0,1,2-2h1v1a2.002,2.002,0,0,1-2,2H11ZM9,19H8a4.0045,4.0045,0,0,1-4-4V14H5a4.0045,4.0045,0,0,1,4,4Zm14-8H22a4.0045,4.0045,0,0,1-4-4V6h1a4.0045,4.0045,0,0,1,4,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),om||(om=i.createElement("path",{d:"M2 28H10V30H2zM17 29a1 1 0 01-.7808-.3752L12.52 24H2V22H13a1 1 0 01.7808.3752l3.146 3.9322 5.2412-7.8621A1 1 0 0123.8 18.4L26.5 22H30v2H26a.9991.9991 0 01-.8-.4l-2.1523-2.8694-5.2159 7.824a.9986.9986 0 01-.7885.4443zM11 16V11h1a4.0045 4.0045 0 004-4V4H13a3.9779 3.9779 0 00-2.7468 1.1067A6.0034 6.0034 0 005 2H2V5a6.0066 6.0066 0 006 6H9v5H2v2H16V16zM13 6h1V7a2.002 2.002 0 01-2 2H11V8A2.002 2.002 0 0113 6zM8 9A4.0045 4.0045 0 014 5V4H5A4.0045 4.0045 0 019 8V9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Au);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mm||(mm=i.createElement("path",{d:"M11 24H15V26H11zM5 24H9V26H5zM23 24H27V26H23zM17 24H21V26H17zM9 22a4.92 4.92 0 014-2h6a5.22 5.22 0 014 2h2.3A6.87 6.87 0 0019 18H13a6.87 6.87 0 00-6.3 4zM24 28H26V30H24zM6 28H8V30H6zM16 16a7 7 0 117-7A7 7 0 0116 16zM16 4a5 5 0 00-5 5A5 5 0 0021 9 5 5 0 0016 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vm||(vm=i.createElement("path",{d:"M28,2H10A2.0023,2.0023,0,0,0,8,4V7H4A2.0023,2.0023,0,0,0,2,9V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2ZM10,4H28V7H10ZM28,14H20V9h8ZM10,21V16h8v5Zm8,2v5H10V23ZM8,21H4V16H8ZM18,9v5H10V9Zm2,7h8v5H20ZM8,9v5H4V9ZM4,23H8v5H4Zm16,5V23h8v5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cm||(cm=i.createElement("path",{d:"M26.5859,6.5859A1.9862,1.9862,0,0,0,25.1719,6H17V2H15V12H6.8281a1.9862,1.9862,0,0,0-1.414.5859L2,16l3.4141,3.4141A1.9862,1.9862,0,0,0,6.8281,20H15V30h2V14h8.1719a1.9862,1.9862,0,0,0,1.414-.5859L30,10ZM6.8281,18l-2-2,2-2H15v4Zm18.3438-6H17V8h8.1719l2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),um||(um=i.createElement("path",{d:"M16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0021,2.0021,0,0,1-2-2V10a2.0021,2.0021,0,0,1,2-2h8a2.0021,2.0021,0,0,1,2,2v5a2.0021,2.0021,0,0,1-2,2H18.5352Z"})),fm||(fm=i.createElement("path",{d:"M16,30,7.5645,20.0513c-.0479-.0571-.3482-.4515-.3482-.4515A10.8888,10.8888,0,0,1,5,13a11,11,0,0,1,22,0,10.8844,10.8844,0,0,1-2.2148,6.5973l-.0015.0025s-.3.3944-.3447.4474ZM8.8125,18.395c.001.0007.2334.3082.2866.3744L16,26.9079l6.91-8.15c.0439-.0552.2783-.3649.2788-.3657A8.901,8.901,0,0,0,25,13,9,9,0,0,0,7,13a8.9054,8.9054,0,0,0,1.8125,5.395Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Iu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bm||(bm=i.createElement("path",{fill:"none",d:"M16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0021,2.0021,0,0,1-2-2V10a2.0021,2.0021,0,0,1,2-2h8a2.0021,2.0021,0,0,1,2,2v5a2.0021,2.0021,0,0,1-2,2H18.5352Z"})),pm||(pm=i.createElement("path",{d:"M16,2A11.0134,11.0134,0,0,0,5,13a10.8885,10.8885,0,0,0,2.2163,6.6s.3.3945.3482.4517L16,30l8.439-9.9526c.0444-.0533.3447-.4478.3447-.4478l.0015-.0024A10.8846,10.8846,0,0,0,27,13,11.0134,11.0134,0,0,0,16,2Zm6,13a2.0023,2.0023,0,0,1-2,2H18.5352L16.832,19.5547l-1.664-1.1094L17.4648,15H20V10H12v5h2v2H12a2.0023,2.0023,0,0,1-2-2V10a2.0023,2.0023,0,0,1,2-2h8a2.0023,2.0023,0,0,1,2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gm||(gm=i.createElement("path",{d:"M28 9L26 22 24 9 22 9 24.516 23 27.484 23 30 9 28 9zM18 23H12V21h6V17H14a2.002 2.002 0 01-2-2V11a2.002 2.002 0 012-2h6v2H14v4h4a2.002 2.002 0 012 2v4A2.002 2.002 0 0118 23zM10 23H4a2.0023 2.0023 0 01-2-2V11A2.002 2.002 0 014 9h6v2H4V21h6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ou);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Em||(Em=i.createElement("path",{d:"M10 23H5a2 2 0 01-2-2V15a2 2 0 012-2h5v2H5v6h5zM18 23H14a2 2 0 01-2-2V9h2V21h4V9h2V21A2 2 0 0118 23zM27 21L27 9.01 22 9.01 22 11.01 25 11.01 25 21 22 21 22 23 30 23 30 21 27 21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wm||(wm=i.createElement("path",{d:"M10 23H5a2 2 0 01-2-2V15a2 2 0 012-2h5v2H5v6h5zM18 23H14a2 2 0 01-2-2V9h2V21h4V9h2V21A2 2 0 0118 23zM28 9H22v2h6v4H23v2h5v4H22v2h6a2 2 0 002-2V11A2 2 0 0028 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hm||(hm=i.createElement("path",{d:"M28.5039,8.1362l-12-7a1,1,0,0,0-1.0078,0l-12,7A1,1,0,0,0,3,9V23a1,1,0,0,0,.4961.8638l12,7a1,1,0,0,0,1.0078,0l12-7A1,1,0,0,0,29,23V9A1,1,0,0,0,28.5039,8.1362ZM16,3.1577,26.0156,9,16,14.8423,5.9844,9ZM5,10.7412l10,5.833V28.2588L5,22.4258ZM17,28.2588V16.5742l10-5.833V22.4258Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xm||(xm=i.createElement("circle",{cx:"16",cy:"16",r:"2"})),zm||(zm=i.createElement("path",{d:"M23.7769,15.4785A8.64,8.64,0,0,0,16,10a8.64,8.64,0,0,0-7.7769,5.4785L8,16l.2231.5215A8.64,8.64,0,0,0,16,22a8.64,8.64,0,0,0,7.7769-5.4785L24,16ZM16,20a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,20Z"})),Lm||(Lm=i.createElement("path",{d:"M28.5039,8.1362l-12-7a1,1,0,0,0-1.0078,0l-12,7A1,1,0,0,0,3,9V23a1,1,0,0,0,.4961.8638l12,7a1,1,0,0,0,1.0078,0l12-7A1,1,0,0,0,29,23V9A1,1,0,0,0,28.5039,8.1362ZM27,22.4258,16,28.8423,5,22.4258V9.5742L16,3.1577,27,9.5742Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mm||(Mm=i.createElement("path",{d:"M21,12V10H17V7H15v3H13a2.002,2.002,0,0,0-2,2v3a2.002,2.002,0,0,0,2,2h6v3H11v2h4v3h2V22h2a2.0023,2.0023,0,0,0,2-2V17a2.002,2.002,0,0,0-2-2H13V12Z"})),Rm||(Rm=i.createElement("path",{d:"M16,4A12,12,0,1,1,4,16,12.0353,12.0353,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14.0412,14.0412,0,0,0,16,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sm||(Sm=i.createElement("path",{d:"M21.4023,15.6426A4.9727,4.9727,0,0,0,23,12V11a5.0059,5.0059,0,0,0-5-5H17V3H15V6H10V26h5v3h2V26h2a5.0059,5.0059,0,0,0,5-5V20A4.9834,4.9834,0,0,0,21.4023,15.6426ZM12,8h6a3.0033,3.0033,0,0,1,3,3v1a3.0033,3.0033,0,0,1-3,3H12ZM22,21a3.0033,3.0033,0,0,1-3,3H12V17h7a3.0033,3.0033,0,0,1,3,3Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ku);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dm||(Dm=i.createElement("path",{d:"M23,20.5151c0-4.6152-3.78-5.1411-6.8171-5.563-3.31-.4609-5.1829-.86-5.1829-3.71C11,8.8491,13.5071,8,15.6538,8a6.7538,6.7538,0,0,1,5.5681,2.6279l1.5562-1.2558A8.6508,8.6508,0,0,0,17,6.0962V3H15V6.022c-3.6152.2192-6,2.26-6,5.22,0,4.73,3.83,5.2627,6.9075,5.69C19.16,17.3848,21,17.7744,21,20.5151,21,23.5474,17.8674,24,16,24c-3.4294,0-4.8782-.9639-6.2219-2.6279L8.2219,22.6279A8.4382,8.4382,0,0,0,15,25.9648V29h2V25.9551C20.7256,25.6509,23,23.6279,23,20.5151Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ym||(ym=i.createElement("path",{d:"M17,26c-3.6162,0-6.3328-2.2974-7.4456-6H19V18H9.1321A15.2782,15.2782,0,0,1,9,16c0-.33.01-.6641.0259-1H19V13H9.2371C9.8447,9.3525,11.81,6,17,6c3.8533,0,5.5315,1.6465,7.1282,4.4893l1.7436-.9786C24.2649,6.6484,22.0779,4,17,4,10.6448,4,7,8.374,7,16c0,7.0654,4.1121,12,10,12,5.0779,0,7.2649-2.6484,8.8718-5.5107l-1.7436-.9786C22.5315,24.3535,20.8533,26,17,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vm||(Vm=i.createElement("path",{d:"M23,19a6.0066,6.0066,0,0,1-6,6H13V18.1079L21.2139,15V13L13,16.1079v-3L21.2139,10V8L13,11.1079V5H11v6.8647L8,13v2l3-1.1353v3L8,18v2l3-1.1353V27h6a8.0092,8.0092,0,0,0,8-8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Am||(Am=i.createElement("path",{d:"M12.4531,25A8.7775,8.7775,0,0,0,14,20a10.6,10.6,0,0,0-.18-2H22V16H13.2175c-.0842-.2109-.17-.4194-.2556-.624A9.8586,9.8586,0,0,1,12,11a4.792,4.792,0,0,1,5-5,6.1234,6.1234,0,0,1,5.2222,2.6279l1.5556-1.2558A8.11,8.11,0,0,0,17,4a6.7781,6.7781,0,0,0-7,7,11.65,11.65,0,0,0,1.0559,5H8v2h3.7729A8.209,8.209,0,0,1,12,20c0,2.5234-1.4858,5-3,5v2H24V25Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Tm||(Tm=i.createElement("path",{d:"M19,4H10V15H7v2h3v3H7v2h3v6h2V22h9V20H12V17h7a6.0067,6.0067,0,0,0,6-6V10A6.0067,6.0067,0,0,0,19,4Zm4,7a4.0045,4.0045,0,0,1-4,4H12V6h7a4.0045,4.0045,0,0,1,4,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ju);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wm||(Wm=i.createElement("path",{d:"M24,7V5H8V7h5.5a4.4906,4.4906,0,0,1,4.45,4H8v2h9.95A4.4906,4.4906,0,0,1,13.5,17H8v2.3452L17.6169,28l1.3379-1.4863L10.606,19H13.5a6.5041,6.5041,0,0,0,6.4746-6H24V11H19.9746A6.4719,6.4719,0,0,0,18.18,7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ku);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Um||(Um=i.createElement("path",{d:"M9,27H7V5h8a5.0057,5.0057,0,0,1,5,5V22H18V10a3.0033,3.0033,0,0,0-3-3H9Z"})),Im||(Im=i.createElement("path",{d:"M20,27H12V10h2V25h6a3.0033,3.0033,0,0,0,3-3V5h2V22A5.0057,5.0057,0,0,1,20,27Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bm||(Bm=i.createElement("path",{d:"M28 14L28 12 23.045 12 24 5 22 5 20 23 17 8 15 8 12 23 10 5 8 5 8.955 12 4 12 4 14 9.227 14 9.636 17 4 17 4 19 9.909 19 11 27 13 27 16 12 19 27 21 27 22.091 19 28 19 28 17 22.364 17 22.773 14 28 14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qu);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Om||(Om=i.createElement("path",{d:"M24.271 5L22 5 16 16 10 5 7.729 5 13.794 16 8 16 8 18 15 18 15 21 8 21 8 23 15 23 15 27 17 27 17 23 24 23 24 21 17 21 17 18 24 18 24 16 18.206 16 24.271 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ju);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fm||(Fm=i.createElement("path",{d:"M23,28a1,1,0,0,1-.71-.29l-6.13-6.14-3.33,5a1,1,0,0,1-1,.44,1,1,0,0,1-.81-.7l-6-20A1,1,0,0,1,6.29,5l20,6a1,1,0,0,1,.7.81,1,1,0,0,1-.44,1l-5,3.33,6.14,6.13a1,1,0,0,1,0,1.42l-4,4A1,1,0,0,1,23,28Zm0-2.41L25.59,23l-7.16-7.15,5.25-3.5L7.49,7.49l4.86,16.19,3.5-5.25Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$u);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qm||(qm=i.createElement("path",{d:"M27.34,12.06l-22-8A1,1,0,0,0,4.06,5.34l8,22A1,1,0,0,0,13,28h0a1,1,0,0,0,.93-.63l3.84-9.6,9.6-3.84a1,1,0,0,0,0-1.87Zm-10.71,4h0l-.4.16-.16.4h0L13,24.2,6.67,6.67,24.2,13Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ef);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xm||(Xm=i.createElement("path",{d:"M26.5,19.63,20.24,16l6.26-3.63a5,5,0,0,0-1.21-9.2A5.19,5.19,0,0,0,24,3a5,5,0,0,0-4.33,7.53,5,5,0,0,0,2.39,2.1l-3.82,2.21L4,6.6,3,8.34,16.24,16,3,23.68l1,1.74,14.24-8.26,3.82,2.21a5,5,0,0,0-2.39,2.1A5,5,0,0,0,24,29a5.19,5.19,0,0,0,1.29-.17,5,5,0,0,0,1.21-9.2ZM21.4,9.53a3,3,0,0,1,1.1-4.12,3,3,0,0,1,4.1,1.11,3,3,0,0,1-1.1,4.11h0A3,3,0,0,1,21.4,9.53Zm5.2,16a3,3,0,0,1-4.1,1.11,3,3,0,0,1-1.1-4.12,3,3,0,0,1,4.1-1.1h0A3,3,0,0,1,26.6,25.48Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cm||(Cm=i.createElement("path",{d:"M28,4H4A2.0023,2.0023,0,0,0,2,6V26a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V6A2.0023,2.0023,0,0,0,28,4ZM4,6H16V26H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_f);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hm||(Hm=i.createElement("path",{d:"M19.05 13.7326L18.05 12 7.928 17.8457 6.9312 17.27a2.9524 2.9524 0 00.6672-.769A3 3 0 103.5 17.5986l2.428 1.4019L3.5 20.4023a3.0342 3.0342 0 103.4407.3223l.987-.5693L14.5914 24l1-1.7294-5.6634-3.27zM4.0344 15.26a1 1 0 11.4658.6069A.9929.9929 0 014.0344 15.26zM4.9988 22a1 1 0 11-.8645 1.5A1 1 0 014.9988 22zM17 26H21V28H17zM10 26H14V28H10z"})),km||(km=i.createElement("path",{d:"M28,28H24V26h4V4H7V8H5V4A2.0023,2.0023,0,0,1,7,2H28a2.0023,2.0023,0,0,1,2,2V26A2.0023,2.0023,0,0,1,28,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nm||(Nm=i.createElement("path",{d:"M15 23H10a2 2 0 01-2-2V15a2 2 0 012-2h5v2H10v6h5zM24 9L22 9 20 16 18 9 16 9 19 18 19 23 21 23 21 18 24 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,af);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zm||(Zm=i.createElement("path",{d:"M25 30a6 6 0 116-6A6.0069 6.0069 0 0125 30zm0-10a4 4 0 104 4A4.0045 4.0045 0 0025 20zM7 30a6 6 0 116-6A6.0069 6.0069 0 017 30zM7 20a4 4 0 104 4A4.0045 4.0045 0 007 20z"})),Ym||(Ym=i.createElement("path",{d:"M17 27H15V20.4139L9.5849 15a2.003 2.003 0 010-2.8292l4.5859-4.5859a2.0024 2.0024 0 012.8286 0L21.414 12H27v1.9993L20.5853 14l-5-5L11 13.5849l6 6zM21.5 8A3.5 3.5 0 1125 4.5 3.5042 3.5042 0 0121.5 8zm0-5A1.5 1.5 0 1023 4.5 1.5017 1.5017 0 0021.5 3z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pm||(Pm=i.createElement("path",{d:"M14 23H9a2 2 0 01-2-2V15a2 2 0 012-2h5v2H9v6h5zM24 9L16 9 16 11 22 11 16 21 16 23 24 23 24 21 18 21 24 11 24 9z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jm||(jm=i.createElement("path",{d:"M24 21H26V26H24zM20 16H22V26H20zM11 26a5.0059 5.0059 0 01-5-5H8a3 3 0 103-3V16a5 5 0 010 10z"})),Km||(Km=i.createElement("path",{d:"M28,2H4A2.002,2.002,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,9H14V4H28ZM12,4v7H4V4ZM4,28V13H28.0007l.0013,15Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gm||(Gm=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM24 21H26V26H24zM20 16H22V26H20zM16 18H18V26H16z"})),Qm||(Qm=i.createElement("path",{d:"M28,2H4A2.002,2.002,0,0,0,2,4V16H4V13H28.001l.001,15H16v2H28a2.0027,2.0027,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2ZM12,11H4V4h8Zm2,0V4H28l.0007,7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,df);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jm||(Jm=i.createElement("path",{d:"M15 6H28V8H15zM15 24H28V26H15zM4 15H17V17H4zM7 11a4 4 0 114-4A4 4 0 017 11zM7 5A2 2 0 109 7 2 2 0 007 5zM7 29a4 4 0 114-4A4 4 0 017 29zm0-6a2 2 0 102 2A2 2 0 007 23zM25 20a4 4 0 114-4A4 4 0 0125 20zm0-6a2 2 0 102 2A2 2 0 0025 14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,of);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$m||($m=i.createElement("path",{d:"M4 6H15V8H4zM18 6H28V8H18zM21 12H28V14H21zM11 12H18V14H11zM4 12H8V14H4zM4 18H28V20H4zM4 24H21V26H4zM24 24H28V26H24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ev||(ev=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V5A2,2,0,0,0,24,3Zm0,2v6H8V5ZM8,19V13H24v6Zm0,8V21H24v6Z"})),iv||(iv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),tv||(tv=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),_v||(_v=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sv||(sv=i.createElement("path",{d:"M7 8H12V10H7zM7 12H12V14H7zM7 16H12V18H7zM20 8H25V10H20zM20 12H25V14H20zM20 16H25V18H20z"})),av||(av=i.createElement("path",{d:"M28,4H4A2.0023,2.0023,0,0,0,2,6V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V6A2.0023,2.0023,0,0,0,28,4ZM4,6H15V28H4ZM17,28V6H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nv||(nv=i.createElement("path",{d:"M28,10H23V6a2.0023,2.0023,0,0,0-2-2H11A2.0023,2.0023,0,0,0,9,6v4H4a2.0023,2.0023,0,0,0-2,2V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V12A2.0023,2.0023,0,0,0,28,10ZM4,28V12H9v2H7v2H9v2H7v2H9v2H7v2H9v4Zm17,0H11V6H21Zm7,0H23V24h2V22H23V20h2V18H23V16h2V14H23V12h5Z"})),rv||(rv=i.createElement("path",{d:"M14 8H18V10H14zM14 12H18V14H14zM14 16H18V18H14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lv||(lv=i.createElement("path",{d:"M23 27.18L20.41 24.59 19 26 23 30 30 23 28.59 21.59 23 27.18z"})),dv||(dv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),ov||(ov=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),mv||(mv=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),vv||(vv=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2h8V27H8V21H26V5A2,2,0,0,0,24,3Zm0,16H8V13H24Zm0-8H8V5H24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ff);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cv||(cv=i.createElement("path",{d:"M30 30L24 30 24 28 28 28 28 4 24 4 24 2 30 2 30 30z"})),uv||(uv=i.createElement("path",{d:"M24.91,19.59a4.51,4.51,0,0,0-2.66-3.24,4.55,4.55,0,0,0-3.5,0,4.94,4.94,0,0,0-.64.35L15.3,13.89a4.53,4.53,0,1,0-1.41,1.41l2.81,2.81a4.48,4.48,0,0,0-.61,3.3,4.51,4.51,0,0,0,2.66,3.24,4.55,4.55,0,0,0,3.5,0,4.51,4.51,0,0,0,2.66-3.24,4.65,4.65,0,0,0,0-1.82ZM11.5,14A2.5,2.5,0,1,1,14,11.5,2.5,2.5,0,0,1,11.5,14Z"})),fv||(fv=i.createElement("path",{d:"M8 30L2 30 2 2 8 2 8 4 4 4 4 28 8 28 8 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bv||(bv=i.createElement("circle",{cx:"11",cy:"8",r:"1"})),pv||(pv=i.createElement("circle",{cx:"11",cy:"16",r:"1"})),gv||(gv=i.createElement("circle",{cx:"11",cy:"24",r:"1"})),Ev||(Ev=i.createElement("path",{d:"M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2H18V27H8V21H26V5A2,2,0,0,0,24,3Zm0,16H8V13H24Zm0-8H8V5H24Z"})),wv||(wv=i.createElement("path",{d:"M29 24.415L27.586 23 25 25.587 22.414 23 21 24.415 23.586 27 21 29.586 22.414 31 25 28.414 27.586 31 29 29.586 26.414 27 29 24.415z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hv||(hv=i.createElement("path",{d:"M18 11H26V13H18zM6 19H14V21H6zM10 16a4 4 0 114-4A4.0045 4.0045 0 0110 16zm0-6a2 2 0 102 2A2.002 2.002 0 0010 10zM22 24a4 4 0 114-4A4.0045 4.0045 0 0122 24zm0-6a2 2 0 102 2A2.002 2.002 0 0022 18z"})),xv||(xv=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,28,30ZM4,4V28H28V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zv||(zv=i.createElement("path",{d:"M25 13L25 4 23 4 23 6 20 6 20 8 23 8 23 13 20 13 20 15 28 15 28 13 25 13zM8.5 6A3.5 3.5 0 115 9.5 3.504 3.504 0 018.5 6m0-2A5.5 5.5 0 1014 9.5 5.5 5.5 0 008.5 4zM23.5 20A3.5 3.5 0 1120 23.5 3.504 3.504 0 0123.5 20m0-2A5.5 5.5 0 1029 23.5 5.5 5.5 0 0023.5 18zM6 19L6 21 9.586 21 4 26.586 5.414 28 11 22.414 11 26 13 26 13 19 6 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ef);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Lv||(Lv=i.createElement("path",{d:"M25 13L25 4 23 4 23 6 20 6 20 8 23 8 23 13 20 13 20 15 28 15 28 13 25 13zM8.5 6A3.5 3.5 0 115 9.5 3.5 3.5 0 018.5 6m0-2A5.5 5.5 0 1014 9.5 5.5 5.5 0 008.5 4zM8.5 20A3.5 3.5 0 115 23.5 3.5 3.5 0 018.5 20m0-2A5.5 5.5 0 1014 23.5 5.5 5.5 0 008.5 18zM23.5 20A3.5 3.5 0 1120 23.5 3.5 3.5 0 0123.5 20m0-2A5.5 5.5 0 1029 23.5 5.5 5.5 0 0023.5 18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mv||(Mv=i.createElement("circle",{cx:"9",cy:"7",r:"1"})),Rv||(Rv=i.createElement("path",{d:"M27,22.14V18a2,2,0,0,0-2-2H17V12h9a2,2,0,0,0,2-2V4a2,2,0,0,0-2-2H6A2,2,0,0,0,4,4v6a2,2,0,0,0,2,2h9v4H7a2,2,0,0,0-2,2v4.14a4,4,0,1,0,2,0V18h8v4H12v8h8V22H17V18h8v4.14a4,4,0,1,0,2,0ZM8,26a2,2,0,1,1-2-2A2,2,0,0,1,8,26Zm10-2v4H14V24ZM6,10V4H26v6ZM26,28a2,2,0,1,1,2-2A2,2,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sv||(Sv=i.createElement("path",{d:"M6 24a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 006 22zM16 4a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 0016 2zM26 4a2 2 0 11-2 2 2 2 0 012-2m0-2a4 4 0 104 4A4 4 0 0026 2zM18 24v4H14V24h4m2-2H12v8h8z"})),Dv||(Dv=i.createElement("path",{d:"M27,22.14V17a2,2,0,0,0-2-2H7V10h3V2H2v8H5v5a2,2,0,0,0,2,2H25v5.14a4,4,0,1,0,2,0ZM4,4H8V8H4ZM26,28a2,2,0,1,1,2-2A2,2,0,0,1,26,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yv||(yv=i.createElement("circle",{cx:"22",cy:"24",r:"2"})),Vv||(Vv=i.createElement("path",{d:"M29.7769,23.4785A8.64,8.64,0,0,0,22,18a8.64,8.64,0,0,0-7.7769,5.4785L14,24l.2231.5215A8.64,8.64,0,0,0,22,30a8.64,8.64,0,0,0,7.7769-5.4785L30,24ZM22,28a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,22,28Z"})),Av||(Av=i.createElement("circle",{cx:"8",cy:"8",r:"1"})),Tv||(Tv=i.createElement("circle",{cx:"8",cy:"16",r:"1"})),Wv||(Wv=i.createElement("circle",{cx:"8",cy:"24",r:"1"})),Uv||(Uv=i.createElement("path",{d:"M5,21h7V19H5V13H21v3h2V5a2,2,0,0,0-2-2H5A2,2,0,0,0,3,5V27a2,2,0,0,0,2,2h7V27H5ZM5,5H21v6H5Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Iv||(Iv=i.createElement("circle",{cx:"22",cy:"24",r:"2"})),Bv||(Bv=i.createElement("path",{d:"M29.7769 23.4785A8.64 8.64 0 0022 18a8.64 8.64 0 00-7.7769 5.4785L14 24l.2231.5215A8.64 8.64 0 0022 30a8.64 8.64 0 007.7769-5.4785L30 24zM22 28a4 4 0 114-4A4.0045 4.0045 0 0122 28zM7 17H12V19H7zM7 12H19V14H7zM7 7H19V9H7z"})),Ov||(Ov=i.createElement("path",{d:"M22,2,4,2A2.0058,2.0058,0,0,0,2,4V28a2.0058,2.0058,0,0,0,2,2h8V28H4V4H22V15h2V4A2.0058,2.0058,0,0,0,22,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fv||(Fv=i.createElement("path",{d:"M28,20H26v2h2v6H4V22H6V20H4a2.0024,2.0024,0,0,0-2,2v6a2.0024,2.0024,0,0,0,2,2H28a2.0024,2.0024,0,0,0,2-2V22A2.0024,2.0024,0,0,0,28,20Z"})),qv||(qv=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),Xv||(Xv=i.createElement("path",{d:"M21,13a2.9609,2.9609,0,0,0-1.2854.3008L17.4141,11l2.3-2.3008A2.9609,2.9609,0,0,0,21,9a3,3,0,1,0-3-3,2.9665,2.9665,0,0,0,.3,1.2852L16,9.5859,13.7,7.2852A2.9665,2.9665,0,0,0,14,6a3,3,0,1,0-3,3,2.9609,2.9609,0,0,0,1.2854-.3008L14.5859,11l-2.3005,2.3008A2.9609,2.9609,0,0,0,11,13a3,3,0,1,0,3,3,2.9665,2.9665,0,0,0-.3-1.2852L16,12.4141l2.3,2.3007A2.9665,2.9665,0,0,0,18,16a3,3,0,1,0,3-3Zm0-8a1,1,0,1,1-1,1A1.0009,1.0009,0,0,1,21,5ZM10,6a1,1,0,1,1,1,1A1.0009,1.0009,0,0,1,10,6Zm1,11a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,11,17Zm10,0a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,21,17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cv||(Cv=i.createElement("circle",{cx:"7",cy:"7",r:"1"})),Hv||(Hv=i.createElement("circle",{cx:"7",cy:"15",r:"1"})),kv||(kv=i.createElement("circle",{cx:"7",cy:"23",r:"1"})),Nv||(Nv=i.createElement("path",{d:"M12,26H4V20h8V18H4V12H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V26a2,2,0,0,0,2,2h8ZM4,4H20v6H4Z"})),Zv||(Zv=i.createElement("path",{d:"M28,17v2.4131A6.996,6.996,0,1,0,22,30V28a5,5,0,1,1,4.5762-7H24v2h6V17Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yv||(Yv=i.createElement("path",{d:"M28 2H20a2.0023 2.0023 0 00-2 2V28a2.0023 2.0023 0 002 2h8a2.0023 2.0023 0 002-2V4A2.0023 2.0023 0 0028 2zm0 2v7H20V4zm0 9v6H20V13zM20 28V21h8v7zM12 15L10 15 10 13 8 13 8 15 6 15 6 17 8 17 8 19 10 19 10 17 12 17 12 15z"})),Pv||(Pv=i.createElement("path",{d:"M16,6V4H10A2.0023,2.0023,0,0,0,8,6V9.08A6.99,6.99,0,0,0,8,22.92V26a2.0023,2.0023,0,0,0,2,2h6V26H10V22.92A6.99,6.99,0,0,0,10,9.08V6ZM14,16a5,5,0,1,1-5-5A5.0059,5.0059,0,0,1,14,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jv||(jv=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,28,30ZM4,4V28H28V4Z"})),Kv||(Kv=i.createElement("path",{d:"M13 7H15V14H13zM8 7H10V14H8zM22 14H20a2.0021 2.0021 0 01-2-2V9a2.0021 2.0021 0 012-2h2a2.0021 2.0021 0 012 2v3A2.0021 2.0021 0 0122 14zM20 9v3h2V9zM22 18H24V25H22zM8 18H10V25H8zM17 25H15a2.0021 2.0021 0 01-2-2V20a2.0021 2.0021 0 012-2h2a2.0021 2.0021 0 012 2v3A2.0021 2.0021 0 0117 25zm-2-5v3h2V20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Df);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gv||(Gv=i.createElement("path",{d:"M26,16a3.9612,3.9612,0,0,0-2.02.5657l-2.8586-2.8585,2.293-2.293a2,2,0,0,0,0-2.8284l-6-6a2,2,0,0,0-2.8284,0l-6,6a2,2,0,0,0,0,2.8284l2.293,2.293L8.02,16.5657A4.043,4.043,0,1,0,9.4343,17.98l2.8585-2.8586,2.293,2.293A1.9773,1.9773,0,0,0,15,17.7233V22H12v8h8V22H17V17.7233a1.9773,1.9773,0,0,0,.4142-.3091l2.293-2.293L22.5657,17.98A3.9885,3.9885,0,1,0,26,16ZM8,20a2,2,0,1,1-2-2A2.0023,2.0023,0,0,1,8,20Zm10,4v4H14V24h4Zm-2-8-6-6,6-6,6,6Zm10,6a2,2,0,1,1,2-2A2.0023,2.0023,0,0,1,26,22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qv||(Qv=i.createElement("circle",{cx:"16",cy:"16",r:"2"})),Jv||(Jv=i.createElement("path",{d:"M30 17L30 15 23.83 15 26.41 12.41 25 11 20 16 25 21 26.41 19.59 23.83 17 30 17zM15 23.83L15 30 17 30 17 23.83 19.59 26.41 21 25 16 20 11 25 12.41 26.41 15 23.83zM7 11L5.59 12.41 8.17 15 2 15 2 17 8.17 17 5.59 19.59 7 21 12 16 7 11zM17 8.17L17 2 15 2 15 8.17 12.41 5.59 11 7 16 12 21 7 19.59 5.59 17 8.17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$v||($v=i.createElement("circle",{cx:"14",cy:"14",r:"2"})),ec||(ec=i.createElement("path",{d:"M20,30a.9967.9967,0,0,1-.707-.293L8.5859,19A2.0126,2.0126,0,0,1,8,17.5859V10a2.002,2.002,0,0,1,2-2h7.5859A1.9864,1.9864,0,0,1,19,8.5859L29.707,19.293a.9994.9994,0,0,1,0,1.414l-9,9A.9967.9967,0,0,1,20,30ZM10,10v7.5859l10,10L27.5859,20l-10-10Z"})),ic||(ic=i.createElement("path",{d:"M12,30H4a2.0021,2.0021,0,0,1-2-2V4A2.0021,2.0021,0,0,1,4,2H28a2.0021,2.0021,0,0,1,2,2v8H28V4H4V28h8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Af);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tc||(tc=i.createElement("path",{d:"M30,15H27V7H25v8H22V7H20v7.8262L7.5239,7.1484A1,1,0,0,0,6,8v7H2v2H6v7a1,1,0,0,0,1.5239.8516L20,17.1738V25h2V17h3v8h2V17h3ZM8,22.21V9.79L18.0918,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_c||(_c=i.createElement("path",{d:"M28 13H30V15H28z"})),sc||(sc=i.createElement("path",{d:"M24.2 3.8H26.2V5.8H24.2z",transform:"rotate(-45.001 25.192 4.808)"})),ac||(ac=i.createElement("path",{d:"M15 0H17V2H15z"})),nc||(nc=i.createElement("path",{d:"M5.8 3.8H7.8V5.8H5.8z",transform:"rotate(-134.999 6.808 4.808)"})),rc||(rc=i.createElement("path",{d:"M2 13H4V15H2zM20 13L17 13 17 10 15 10 15 13 12 13 12 15 15 15 15 18 17 18 17 15 20 15zM13 30H19V32H13zM11 26H21V28H11z"})),lc||(lc=i.createElement("path",{d:"M16,4C10.5,4,6,8.5,6,14c0,4.4,2,6.3,3.5,7.6c1,0.9,1.5,1.5,1.5,2.4h2c0-1.8-1.1-2.9-2.2-3.9C9.4,18.9,8,17.5,8,14 c0-4.4,3.6-8,8-8s8,3.6,8,8c0,3.5-1.4,4.9-2.8,6.1c-1.1,1-2.2,2-2.2,3.9h2c0-0.9,0.5-1.5,1.5-2.4C24,20.3,26,18.4,26,14 C26,8.5,21.5,4,16,4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dc||(dc=i.createElement("path",{d:"M28 24v2H15.8164a2.983 2.983 0 00-5.6328 0H4V24H2v6H4V28h6.1836a2.983 2.983 0 005.6328 0H28v2h2V24zM13 7.5L13 16.499 13 16.499 21 12 13 7.5z"})),oc||(oc=i.createElement("path",{d:"M16,22A10,10,0,1,1,26,12,10.0113,10.0113,0,0,1,16,22ZM16,4a8,8,0,1,0,8,8A8.0092,8.0092,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mc||(mc=i.createElement("path",{d:"M7,30a5,5,0,1,1,5-5A5.0059,5.0059,0,0,1,7,30Zm0-8a3,3,0,1,0,3,3A3.0033,3.0033,0,0,0,7,22Z"})),vc||(vc=i.createElement("path",{d:"M24,26H14V24H24V17H8a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,8,6H18V8H8v7H24a2.0021,2.0021,0,0,1,2,2v7A2.0021,2.0021,0,0,1,24,26Z"})),cc||(cc=i.createElement("path",{d:"M28,12H22a2.0023,2.0023,0,0,1-2-2V4a2.0023,2.0023,0,0,1,2-2h6a2.0023,2.0023,0,0,1,2,2v6A2.0023,2.0023,0,0,1,28,12ZM22,4v6h6V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,If);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uc||(uc=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM28 12H22a2.0023 2.0023 0 01-2-2V4a2.0023 2.0023 0 012-2h6a2.0023 2.0023 0 012 2v6A2.0023 2.0023 0 0128 12zM22 4v6h6V4z"})),fc||(fc=i.createElement("path",{d:"M24,26H16V24h8V17H8a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,8,6H18V8H8v7H24a2.0021,2.0021,0,0,1,2,2v7A2.0021,2.0021,0,0,1,24,26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bf);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bc||(bc=i.createElement("path",{d:"M5 25V15.8281l-3.5859 3.586L0 18l6-6 6 6-1.4141 1.4141L7 15.8281V25H19v2H7A2.0024 2.0024 0 015 25zM24 22h4a2.002 2.002 0 012 2v4a2.002 2.002 0 01-2 2H24a2.002 2.002 0 01-2-2V24A2.002 2.002 0 0124 22zm4 6V24H23.9985L24 28zM27 6v9.1719l3.5859-3.586L32 13l-6 6-6-6 1.4141-1.4141L25 15.1719V6H13V4H25A2.0024 2.0024 0 0127 6zM2 6H8V8H2zM2 2H10V4H2z"})),_)})).propTypes=da;var Ff=["iconDescription","className"];function qf(e){var t=e.iconDescription,_=e.className,s=B(e,Ff),a=Z();return i.createElement(gc,T({className:k()(_,"".concat(a,"--copy-btn")),"aria-label":t,title:t},s),i.createElement(Of,{className:"".concat(a,"--snippet__icon")}))}qf.propTypes={className:P().string,feedback:P().string,feedbackTimeout:P().number,iconDescription:P().string,onClick:P().func},qf.defaultProps={iconDescription:"Copy to clipboard",feedback:"Copied!",feedbackTimeout:2e3,onClick:function(){}};var Xf=0;var Cf,Hf,kf,Nf,Zf,Yf,Pf,jf,Kf,Gf,Qf,Jf,$f,eb,ib,tb,_b,sb,ab,nb,rb,lb,db,ob,mb,vb,cb,ub,fb,bb,pb,gb,Eb,wb,hb,xb,zb,Lb,Mb,Rb,Sb,Db,yb,Vb,Ab,Tb,Wb,Ub,Ib,Bb,Ob,Fb,qb,Xb,Cb,Hb,kb,Nb,Zb,Yb,Pb,jb,Kb,Gb,Qb,Jb,$b,ep,ip,tp,_p,sp,ap,np,rp,lp,dp,op,mp,vp,cp,up,fp,bp,pp,gp,Ep,wp,hp,xp,zp,Lp,Mp,Rp,Sp,Dp,yp,Vp,Ap,Tp,Wp,Up,Ip,Bp,Op,Fp,qp,Xp,Cp,Hp,kp,Np,Zp,Yp,Pp,jp,Kp,Gp,Qp,Jp,$p,eg,ig,tg,_g,sg,ag,ng,rg,lg,dg,og,mg,vg,cg,ug,fg,bg,pg,gg,Eg,wg,hg,xg,zg,Lg,Mg,Rg,Sg,Dg,yg,Vg,Ag,Tg,Wg,Ug,Ig,Bg,Og,Fg,qg,Xg,Cg,Hg,kg,Ng,Zg,Yg,Pg,jg,Kg,Gg,Qg,Jg,$g,eE,iE,tE,_E,sE,aE,nE,rE,lE,dE,oE,mE,vE,cE,uE,fE,bE,pE,gE,EE,wE,hE,xE,zE,LE,ME,RE,SE,DE,yE,VE,AE,TE,WE,UE,IE,BE,OE,FE,qE=t(998),XE=t.n(qE),CE=["className","type","children","disabled","feedback","feedbackTimeout","onClick","ariaLabel","copyText","copyButtonDescription","light","showMoreText","showLessText","hideCopyButton","wrapText","maxCollapsedNumberOfRows","maxExpandedNumberOfRows","minCollapsedNumberOfRows","minExpandedNumberOfRows"],HE=16;function kE(e){var t,_=e.className,s=e.type,a=e.children,n=e.disabled,r=e.feedback,l=e.feedbackTimeout,d=e.onClick,o=e.ariaLabel,m=e.copyText,v=e.copyButtonDescription,c=e.light,u=e.showMoreText,f=e.showLessText,b=e.hideCopyButton,p=e.wrapText,g=e.maxCollapsedNumberOfRows,E=void 0===g?15:g,w=e.maxExpandedNumberOfRows,h=void 0===w?0:w,x=e.minCollapsedNumberOfRows,z=void 0===x?3:x,L=e.minExpandedNumberOfRows,M=void 0===L?16:L,R=B(e,CE),S=q((0,i.useState)(!1),2),D=S[0],y=S[1],V=q((0,i.useState)(!1),2),W=V[0],U=V[1],I=(0,i.useRef)(function(){return Xf++,"".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id").concat(Xf)}()),O=I.current,F=(0,i.useRef)(),X=(0,i.useRef)(),C=(0,i.useRef)(),H=q((0,i.useState)(!1),2),N=H[0],Y=H[1],P=q((0,i.useState)(!1),2),j=P[0],K=P[1],G=(0,i.useCallback)((function(){return"single"===s?X:"multi"===s?F:void 0}),[s]),Q=Z(),J=(0,i.useCallback)((function(){var e=G().current,i=e.clientWidth,t=e.scrollLeft,_=e.scrollWidth;return{horizontalOverflow:_>i,codeClientWidth:i,codeScrollWidth:_,codeScrollLeft:t}}),[G]),$=(0,i.useCallback)((function(){if("inline"!==s&&("single"!==s||null!==X&&void 0!==X&&X.current)&&("multi"!==s||null!==F&&void 0!==F&&F.current)){var e=J(),i=e.horizontalOverflow,t=e.codeClientWidth,_=e.codeScrollWidth,a=e.codeScrollLeft;Y(i&&!!a),K(i&&a+t!==_)}}),[s,J]);hl({ref:G(),onResize:function(){if(null!==F&&void 0!==F&&F.current&&"multi"===s){var e=F.current.getBoundingClientRect().height;U(E>0&&(h<=0||h>E)&&e>E*HE),D&&M>0&&e<=M*HE&&y(!1)}(null!==F&&void 0!==F&&F.current&&"multi"===s||null!==X&&void 0!==X&&X.current&&"single"===s)&&$()}},[s,E,h,M,HE]),(0,i.useEffect)((function(){$()}),[$]);var ee=function(e){var i;(m||null!==C&&void 0!==C&&C.current)&&XE()(null!==m&&void 0!==m?m:null===C||void 0===C||null===(i=C.current)||void 0===i?void 0:i.innerText);d&&d(e)},ie=k()(_,"".concat(Q,"--snippet"),(A(t={},"".concat(Q,"--snippet--").concat(s),s),A(t,"".concat(Q,"--snippet--disabled"),"inline"!==s&&n),A(t,"".concat(Q,"--snippet--expand"),D),A(t,"".concat(Q,"--snippet--light"),c),A(t,"".concat(Q,"--snippet--no-copy"),b),A(t,"".concat(Q,"--snippet--wraptext"),p),t)),te=D?f:u;if("inline"===s)return b?i.createElement("span",{className:ie},i.createElement("code",{id:O,ref:C},a)):i.createElement(gc,T({},R,{onClick:ee,"aria-label":o,"aria-describedby":O,className:ie,feedback:r,feedbackTimeout:l}),i.createElement("code",{id:O,ref:C},a));var _e={};if("multi"===s){var se={};D?(h>0&&(se.maxHeight=h*HE),M>0&&(se.minHeight=M*HE)):(E>0&&(se.maxHeight=E*HE),z>0&&(se.minHeight=z*HE)),Object.keys(se).length&&(_e.style=se)}return i.createElement("div",T({},R,{className:ie}),i.createElement("div",T({ref:X,role:"single"===s?"textbox":null,tabIndex:"single"!==s||n?null:0,className:"".concat(Q,"--snippet-container"),"aria-label":o||"code-snippet",onScroll:"single"===s&&$||null},_e),i.createElement("pre",{ref:F,onScroll:"multi"===s&&$||null},i.createElement("code",{ref:C},a))),N&&i.createElement("div",{className:"".concat(Q,"--snippet__overflow-indicator--left")}),j&&i.createElement("div",{className:"".concat(Q,"--snippet__overflow-indicator--right")}),!b&&i.createElement(qf,{disabled:n,onClick:ee,feedback:r,feedbackTimeout:l,iconDescription:v}),W&&i.createElement(Sl,{kind:"ghost",size:"field",className:"".concat(Q,"--snippet-btn--expand"),disabled:n,onClick:function(){return y(!D)}},i.createElement("span",{className:"".concat(Q,"--snippet-btn--text")},te),i.createElement(Dr,{"aria-label":te,className:"".concat(Q,"--icon-chevron--down ").concat(Q,"--snippet__icon"),name:"chevron--down",role:"img"})))}kE.propTypes={ariaLabel:P().string,children:P().node,className:P().string,copyButtonDescription:P().string,copyText:P().string,disabled:P().bool,feedback:P().string,feedbackTimeout:P().number,hideCopyButton:P().bool,light:P().bool,maxCollapsedNumberOfRows:P().number,maxExpandedNumberOfRows:P().number,minCollapsedNumberOfRows:P().number,minExpandedNumberOfRows:P().number,onClick:P().func,showLessText:P().string,showMoreText:P().string,type:P().oneOf(["single","inline","multi"]),wrapText:P().bool},kE.defaultProps={ariaLabel:"Copy to clipboard",type:"single",showMoreText:"Show more",showLessText:"Show less",wrapText:!1};var NE=["children","size"],ZE=["children","size"],YE=["children","size"],PE=["children","size"],jE=["children","size"],KE=["children","size"],GE=["children","size"],QE=["children","size"],JE=["children","size"],$E=["children","size"],ew=["children","size"],iw=["children","size"],tw=["children","size"],_w=["children","size"],sw=["children","size"],aw=["children","size"],nw=["children","size"],rw=["children","size"],lw=["children","size"],dw=["children","size"],ow=["children","size"],mw=["children","size"],vw=["children","size"],cw=["children","size"],uw=["children","size"],fw=["children","size"],bw=["children","size"],pw=["children","size"],gw=["children","size"],Ew=["children","size"],ww=["children","size"],hw=["children","size"],xw=["children","size"],zw=["children","size"],Lw=["children","size"],Mw=["children","size"],Rw=["children","size"],Sw=["children","size"],Dw=["children","size"],yw=["children","size"],Vw=["children","size"],Aw=["children","size"],Tw=["children","size"],Ww=["children","size"],Uw=["children","size"],Iw=["children","size"],Bw=["children","size"],Ow=["children","size"],Fw=["children","size"],qw=["children","size"],Xw=["children","size"],Cw=["children","size"],Hw=["children","size"],kw=["children","size"],Nw=["children","size"],Zw=["children","size"],Yw=["children","size"],Pw=["children","size"],jw=["children","size"],Kw=["children","size"],Gw=["children","size"],Qw=["children","size"],Jw=["children","size"],$w=["children","size"],eh=["children","size"],ih=["children","size"],th=["children","size"],_h=["children","size"],sh=["children","size"],ah=["children","size"],nh=["children","size"],rh=["children","size"],lh=["children","size"],dh=["children","size"],oh=["children","size"],mh=["children","size"],vh=["children","size"],ch=["children","size"],uh=["children","size"],fh=["children","size"],bh=["children","size"],ph=["children","size"],gh=["children","size"],Eh=["children","size"],wh=["children","size"],hh=["children","size"],xh=["children","size"],zh=["children","size"],Lh=["children","size"],Mh=["children","size"],Rh=["children","size"],Sh=["children","size"],Dh=["children","size"],yh=["children","size"],Vh=["children","size"],Ah=["children","size"],Th=["children","size"],Wh=["children","size"],Uh=["children","size"],Ih=["children","size"],Bh=["children","size"],Oh=["children","size"],Fh=["children","size"],qh=["children","size"],Xh=["children","size"],Ch=["children","size"],Hh=["children","size"],kh=["children","size"],Nh=["children","size"],Zh=["children","size"],Yh=["children","size"],Ph=["children","size"],jh=["children","size"],Kh=["children","size"],Gh=["children","size"],Qh=["children","size"],Jh=["children","size"],$h=["children","size"],ex=["children","size"],ix=["children","size"],tx=["children","size"],_x=["children","size"],sx=["children","size"],ax=["children","size"],nx=["children","size"];i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,NE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cf||(Cf=i.createElement("path",{d:"M16 31H14v-.228a3.0135 3.0135 0 00-1.9468-2.8091L8.5215 26.6384A3.9034 3.9034 0 016 23H8a1.8946 1.8946 0 001.2236 1.7659L12.7554 26.09A5.0226 5.0226 0 0116 30.772zM30 31H28v-.228a3.0135 3.0135 0 00-1.9468-2.8091l-3.5317-1.3245A3.9034 3.9034 0 0120 23h2a1.8946 1.8946 0 001.2236 1.7659L26.7554 26.09A5.0226 5.0226 0 0130 30.772zM11 13H17V15H11z"})),Hf||(Hf=i.createElement("path",{d:"M23.4409,8,22.1687,3.45A2.009,2.009,0,0,0,20.2456,2H7.7544A2.0089,2.0089,0,0,0,5.8313,3.4507L4.5315,8H2v2H4v7a2.0025,2.0025,0,0,0,2,2v2H8V19H20v2h2V19a2.0025,2.0025,0,0,0,2-2V10h2V8ZM7.7544,4H20.2458l1.4285,5H6.3257ZM22,13H20v2h2v2H6V15H8V13H6V11H22Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ZE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kf||(kf=i.createElement("path",{d:"M12 30H4a2.0023 2.0023 0 01-2-2V24a2.0023 2.0023 0 012-2h8a2.0023 2.0023 0 012 2v4A2.0023 2.0023 0 0112 30zM4 24v4h8V24zM28 20H12a2.0023 2.0023 0 01-2-2V14a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2v4A2.0023 2.0023 0 0128 20zM12 14v4H28V14zM16 10H4A2.0023 2.0023 0 012 8V4A2.0023 2.0023 0 014 2H16a2.0023 2.0023 0 012 2V8A2.0023 2.0023 0 0116 10zM4 4V8H16V4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,YE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Nf||(Nf=i.createElement("path",{d:"M6.34 19H17.65V21H6.34z",transform:"rotate(-45 11.995 20.002)"})),Zf||(Zf=i.createElement("path",{d:"M17,30a1,1,0,0,1-.37-.07,1,1,0,0,1-.62-.79l-1-7,2-.28.75,5.27L21,24.52V17a1,1,0,0,1,.29-.71l4.07-4.07A8.94,8.94,0,0,0,28,5.86V4H26.14a8.94,8.94,0,0,0-6.36,2.64l-4.07,4.07A1,1,0,0,1,15,11H7.48L4.87,14.26l5.27.75-.28,2-7-1a1,1,0,0,1-.79-.62,1,1,0,0,1,.15-1l4-5A1,1,0,0,1,7,9h7.59l3.77-3.78A10.92,10.92,0,0,1,26.14,2H28a2,2,0,0,1,2,2V5.86a10.92,10.92,0,0,1-3.22,7.78L23,17.41V25a1,1,0,0,1-.38.78l-5,4A1,1,0,0,1,17,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,PE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yf||(Yf=i.createElement("path",{d:"M17.91 26.82l.35 2a12.9 12.9 0 004.24-1.54l-1-1.73A10.88 10.88 0 0117.91 26.82zM24.42 23.07L26 24.35a13 13 0 002.24-3.91l-1.87-.68A11 11 0 0124.42 23.07zM9.5 27.25a12.9 12.9 0 004.24 1.54l.35-2a10.88 10.88 0 01-3.59-1.3zM5.67 19.76l-1.87.68A13 13 0 006 24.35l.32-.26 1.22-1h0a11 11 0 01-1.91-3.31zM29 16a12.85 12.85 0 00-.8-4.44l-1.87.68A11.18 11.18 0 0127 16zM26 7.65a13 13 0 00-20 0V4H4v8h8V10H6.81A11 11 0 0124.42 8.93z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pf||(Pf=i.createElement("path",{d:"M14.0913 26.8235l-.3467 1.968a12.8956 12.8956 0 01-4.24-1.5418l1-1.7307A10.9086 10.9086 0 0014.0913 26.8235zM7.5767 23.0682L6.0449 24.3533a12.9811 12.9811 0 01-2.25-3.9112l1.8775-.6834A10.9808 10.9808 0 007.5767 23.0682zM22.4951 27.25a12.8956 12.8956 0 01-4.24 1.5418l-.3467-1.968a10.9086 10.9086 0 003.5869-1.3045zM26.3271 19.7587l1.8775.6834a12.9811 12.9811 0 01-2.2495 3.9112l-.3115-.2614-1.22-1.0237h0a10.9822 10.9822 0 001.9038-3.3093zM13.6616 5.2559c-.1592.0346-.3144.08-.4712.1215-.2131.0562-.4258.1138-.6335.1822-.1643.0547-.325.1167-.4859.1782-.1926.0742-.3835.1509-.57.2349-.1611.0727-.3193.15-.4763.23q-.2677.1363-.5262.2867c-.153.0893-.3046.18-.4531.2758-.1679.1089-.3308.2242-.4922.3413-.1406.1026-.2817.2037-.417.3125-.1616.1294-.3156.2676-.47.4063-.1225.11-.2478.2168-.3652.332-.1668.1636-.3223.3379-.4785.5117A10.9438 10.9438 0 005 16H3A12.9363 12.9363 0 016.05 7.65l-.0047-.0039c.0918-.1094.197-.2061.2925-.3125.1841-.2051.3672-.41.5635-.603.1382-.1358.2856-.2613.43-.3907.1831-.1645.3657-.3286.5581-.4824.1592-.1279.3244-.2466.4895-.3667.1921-.14.3855-.2768.5854-.4062.1743-.1128.3523-.2188.5322-.3238q.3081-.1786.6253-.3408c.1846-.0942.37-.1846.56-.27.2224-.1.449-.1914.678-.2793.1894-.0723.3777-.1455.5713-.209.2463-.0815.498-.1494.7507-.2163.1848-.0493.3674-.1025.5554-.1431.29-.0634.5865-.1074.8833-.1508.159-.023.3145-.0552.4754-.0728A12.9331 12.9331 0 0126 7.7031V4h2v8H20V10h5.1885A10.961 10.961 0 0016 5a11.1114 11.1114 0 00-1.189.0669c-.1362.0146-.268.042-.4026.0615C14.1575 5.165 13.907 5.2026 13.6616 5.2559z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,KE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jf||(jf=i.createElement("path",{d:"M25.95,7.65l.0047-.0039c-.0918-.1094-.197-.2061-.2925-.3125-.1841-.2051-.3672-.41-.5635-.603-.1382-.1358-.2856-.2613-.43-.3907-.1831-.1645-.3657-.3286-.5581-.4824-.1592-.1279-.3244-.2466-.4895-.3667-.1921-.14-.3855-.2768-.5854-.4062-.1743-.1128-.3523-.2188-.5322-.3238q-.3081-.1786-.6253-.3408c-.1846-.0942-.37-.1846-.56-.27-.2224-.1-.449-.1914-.678-.2793-.1894-.0723-.3777-.1455-.5713-.209-.2463-.0815-.498-.1494-.7507-.2163-.1848-.0493-.3674-.1025-.5554-.1431-.29-.0634-.5865-.1074-.8833-.1508-.159-.023-.3145-.0552-.4754-.0728A12.9331,12.9331,0,0,0,6,7.7031V4H4v8h8V10H6.8115A10.961,10.961,0,0,1,16,5a11.1114,11.1114,0,0,1,1.189.0669c.1362.0146.268.042.4026.0615.2509.0366.5014.0742.7468.1275.1592.0346.3144.08.4712.1215.2131.0562.4258.1138.6335.1822.1643.0547.325.1167.4859.1782.1926.0742.3835.1509.5705.2349.1611.0727.3193.15.4763.23q.2677.1363.5262.2867c.153.0893.3046.18.4531.2758.1679.1089.3308.2242.4922.3413.1406.1026.2817.2037.417.3125.1616.1294.3156.2676.47.4063.1225.11.2478.2168.3652.332.1668.1636.3223.3379.4785.5117A10.9928,10.9928,0,1,1,5,16H3A13,13,0,1,0,25.95,7.65Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,GE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kf||(Kf=i.createElement("path",{d:"M28 30H16a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM16 16V28H28.0012L28 16zM15 2L13.59 3.41 16.17 6H11a7.0078 7.0078 0 00-7 7v5H6V13a5.0057 5.0057 0 015-5h5.17l-2.58 2.59L15 12l5-5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,QE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gf||(Gf=i.createElement("path",{d:"M16 30H4a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0116 30zM4 16V28H16.0012L16 16zM30 15l-1.41-1.41L26 16.17V11a7.0078 7.0078 0 00-7-7H14V6h5a5.0057 5.0057 0 015 5v5.17l-2.59-2.58L20 15l5 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,JE);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qf||(Qf=i.createElement("path",{d:"M16 30H4a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0116 30zM30 15l-1.41-1.41L26 16.17V11a7.0078 7.0078 0 00-7-7H14V6h5a5.0057 5.0057 0 015 5v5.17l-2.59-2.58L20 15l5 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$E);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Jf||(Jf=i.createElement("path",{d:"M28 30H16a2.0023 2.0023 0 01-2-2V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM15 2L13.59 3.41 16.17 6H11a7.0078 7.0078 0 00-7 7v5H6V13a5.0057 5.0057 0 015-5h5.17l-2.58 2.59L15 12l5-5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ew);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$f||($f=i.createElement("path",{d:"M2 28V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H4A2.0023 2.0023 0 012 28zM4 16L3.9988 28H16V16zM17 2l1.41 1.41L15.83 6H21a7.0078 7.0078 0 017 7v5H26V13a5.0057 5.0057 0 00-5-5H15.83l2.58 2.59L17 12 12 7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,iw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),eb||(eb=i.createElement("path",{d:"M14 28V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H16A2.0023 2.0023 0 0114 28zm2-12l-.0012 12H28V16zM2 15l1.41-1.41L6 16.17V11a7.0078 7.0078 0 017-7h5V6H13a5.0057 5.0057 0 00-5 5v5.17l2.59-2.58L12 15 7 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ib||(ib=i.createElement("path",{d:"M14 28V16a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H16A2.0023 2.0023 0 0114 28zM2 15l1.41-1.41L6 16.17V11a7.0078 7.0078 0 017-7h5V6H13a5.0057 5.0057 0 00-5 5v5.17l2.59-2.58L12 15 7 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_w);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tb||(tb=i.createElement("path",{d:"M2 28V16a2.0023 2.0023 0 012-2H16a2.0023 2.0023 0 012 2V28a2.0023 2.0023 0 01-2 2H4A2.0023 2.0023 0 012 28zM17 2l1.41 1.41L15.83 6H21a7.0078 7.0078 0 017 7v5H26V13a5.0057 5.0057 0 00-5-5H15.83l2.58 2.59L17 12 12 7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),_b||(_b=i.createElement("path",{d:"M21 7L16 2 11 7 12.409 8.419 15 5.847 15 13 17 13 17 5.794 19.591 8.419 21 7zM21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,aw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sb||(sb=i.createElement("path",{d:"M21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11zM12.4289 5.8227v1.63a1.1269 1.1269 0 01-.6767 1.026l-1.39.5967A1.1218 1.1218 0 019.14 8.8424L7.3208 7.0233a1.1165 1.1165 0 01.0125-1.579l.0348-.0328c7.393-6.527 14.6913-2.0374 17.2127-.0473a1.1166 1.1166 0 01.1746 1.5693 1.1011 1.1011 0 01-.0873.0971L22.9108 8.7878a1.1114 1.1114 0 01-1.2225.2329l-1.39-.5967a1.1112 1.1112 0 01-.68-1.0223v-1.63S15.9726 3.0648 12.4289 5.8227z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ab||(ab=i.createElement("circle",{cx:"16",cy:"13.5",r:"1.5"})),nb||(nb=i.createElement("path",{d:"M19.5356,10.4648a5,5,0,0,0-7.0717,0L11.05,9.0508a6.9992,6.9992,0,0,1,9.9,0Z"})),rb||(rb=i.createElement("path",{d:"M23.0713 6.929a10 10 0 00-14.1426 0L7.5146 5.5144a12.0011 12.0011 0 0116.9708 0zM21 25L16 30 11 25 12.409 23.581 15 26.153 15 19 17 19 17 26.206 19.591 23.581 21 25zM24 11L19 16 24 21 25.419 19.591 22.847 17 30 17 30 15 22.794 15 25.419 12.409 24 11zM8 11L13 16 8 21 6.581 19.591 9.153 17 2 17 2 15 9.206 15 6.581 12.409 8 11z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lb||(lb=i.createElement("path",{d:"M4 24H28V26H4zM26 18H6V14H26v4m2 0V14a2 2 0 00-2-2H6a2 2 0 00-2 2v4a2 2 0 002 2H26a2 2 0 002-2zM4 6H28V8H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),db||(db=i.createElement("path",{d:"M26 20H6a2 2 0 00-2 2v4a2 2 0 002 2H26a2 2 0 002-2V22A2 2 0 0026 20zm0 6H6V22H26zM17 7.828L19.586 10.414 21 9 16 4 11 9 12.414 10.414 15 7.828 15 14 4 14 4 16 28 16 28 14 17 14 17 7.828z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ob||(ob=i.createElement("path",{d:"M24 30H4a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H24a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0124 30zM4 22H3.9985L4 28H24V22zM30 3.41L28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41z"})),mb||(mb=i.createElement("path",{d:"M4,14V8H18V6H4A2.0023,2.0023,0,0,0,2,8v6a2.0023,2.0023,0,0,0,2,2H26V14Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ow);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vb||(vb=i.createElement("path",{d:"M4 18L15 18 15 24.172 12.414 21.586 11 23 16 28 21 23 19.586 21.586 17 24.172 17 18 28 18 28 16 4 16 4 18zM26 4H6A2 2 0 004 6v4a2 2 0 002 2H26a2 2 0 002-2V6A2 2 0 0026 4zm0 6H6V6H26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cb||(cb=i.createElement("path",{d:"M28 12H10a2.0021 2.0021 0 01-2-2V4a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 12zM10 4v6H28V4zM28 30H10a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 30zM10 22v6H28V22zM9 16L3.414 10.414 2 11.828 6.172 16 2 20.172 3.414 21.586 9 16z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ub||(ub=i.createElement("path",{d:"M8 18c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6C14 20.7 11.3 18 8 18zM8 28c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4C12 26.2 10.2 28 8 28zM30 24h-2C28 13 19 4 8 4V2C20.1 2 30 11.9 30 24z"})),fb||(fb=i.createElement("path",{d:"M22,24h-2c0-6.6-5.4-12-12-12v-2C15.7,10,22,16.3,22,24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,cw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bb||(bb=i.createElement("path",{d:"M10 16H22V18H10zM10 10H22V12H10z"})),pb||(pb=i.createElement("path",{d:"M16,30,9.8242,26.7071A10.9815,10.9815,0,0,1,4,17V4A2.0022,2.0022,0,0,1,6,2H26a2.0022,2.0022,0,0,1,2,2V17a10.9815,10.9815,0,0,1-5.8242,9.7069ZM6,4V17a8.9852,8.9852,0,0,0,4.7656,7.9423L16,27.7333l5.2344-2.791A8.9852,8.9852,0,0,0,26,17V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gb||(gb=i.createElement("path",{d:"M30 24a6 6 0 10-6 6A6.0066 6.0066 0 0030 24zm-2 0a3.9521 3.9521 0 01-.5669 2.019L21.981 20.5669A3.9529 3.9529 0 0124 20 4.0045 4.0045 0 0128 24zm-8 0a3.9521 3.9521 0 01.5669-2.019l5.4521 5.4521A3.9529 3.9529 0 0124 28 4.0045 4.0045 0 0120 24zM8 16H18V18H8zM8 10H20V12H8z"})),Eb||(Eb=i.createElement("path",{d:"M14,27.7334l-5.2344-2.791A8.9858,8.9858,0,0,1,4,17V4H24l0,11h2L26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L14,30Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wb||(wb=i.createElement("path",{d:"M29.707 19.293l-3-3a.9994.9994 0 00-1.414 0L16 25.5859V30h4.4141l9.2929-9.293A.9994.9994 0 0029.707 19.293zM19.5859 28H18V26.4141l5-5L24.5859 23zM26 21.5859L24.4141 20 26 18.4141 27.5859 20zM8 16H18V18H8zM8 10H20V12H8z"})),hb||(hb=i.createElement("path",{d:"M26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L13,29.4668V27.2L8.7656,24.9424A8.9858,8.9858,0,0,1,4,17V4H24v9h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xb||(xb=i.createElement("path",{fill:"none",d:"M9 16H23V18H9z","data-icon-path":"inner-path"})),zb||(zb=i.createElement("path",{fill:"none",d:"M9 10H23V12H9z"})),Lb||(Lb=i.createElement("path",{d:"M26,2H6A2.0023,2.0023,0,0,0,4,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L16,30l6.1758-3.293A10.9814,10.9814,0,0,0,28,17V4A2.0023,2.0023,0,0,0,26,2ZM23,18H9V16H23Zm0-6H9V10H23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,pw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mb||(Mb=i.createElement("path",{d:"M23,30a7,7,0,1,1,7-7A7.0078,7.0078,0,0,1,23,30Zm0-12a5,5,0,1,0,5,5A5.0055,5.0055,0,0,0,23,18Z"})),Rb||(Rb=i.createElement("path",{d:"M26 24.586L24 22.586 24 20 22 20 22 23.414 24.586 26 26 24.586zM8 16H14V18H8zM8 10H20V12H8z"})),Sb||(Sb=i.createElement("path",{d:"M26,4a2.0023,2.0023,0,0,0-2-2H4A2.0023,2.0023,0,0,0,2,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L13,29.4668V27.2L8.7656,24.9424A8.9858,8.9858,0,0,1,4,17V4H24v9h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Db||(Db=i.createElement("path",{d:"M29,10H3a1,1,0,0,0-1,1V21a1,1,0,0,0,1,1H29a1,1,0,0,0,1-1V11A1,1,0,0,0,29,10ZM28,20H4V12H8v4h2V12h5v4h2V12h5v4h2V12h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ew);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yb||(yb=i.createElement("path",{d:"M29.41,21.67,10.34,2.58a2,2,0,0,0-2.83,0L2.59,7.51a2,2,0,0,0,0,2.82L21.66,29.42a2,2,0,0,0,1.42.58,2,2,0,0,0,1.41-.58l4.92-4.93A2,2,0,0,0,29.41,21.67ZM23.08,28,4,8.92,8.92,4l3.79,3.79L10.46,10l1.41,1.41L14.12,9.2l4.13,4.13L16,15.58,17.42,17l2.25-2.25,4.13,4.13-2.25,2.25L23,22.54l2.25-2.25L28,23.08Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ww);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vb||(Vb=i.createElement("path",{d:"M21,16a6,6,0,1,1-6,6,6,6,0,0,1,6-6m0-2a8,8,0,1,0,8,8,8,8,0,0,0-8-8Z"})),Ab||(Ab=i.createElement("path",{d:"M26,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2h4V26H6V12H28V6A2,2,0,0,0,26,4ZM6,10V6H26v4Z"})),Tb||(Tb=i.createElement("path",{d:"M19 19L19 25 24 22 19 19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wb||(Wb=i.createElement("path",{d:"M18,23H12V21h6V17H14a2,2,0,0,1-2-2V11a2,2,0,0,1,2-2h6v2H14v4h4a2,2,0,0,1,2,2v4A2,2,0,0,1,18,23Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ub||(Ub=i.createElement("path",{d:"M24 9L22 9 22 7 20 7 20 9 18 9 18 11 20 11 20 17 22 17 22 11 24 11 24 9zM14 23H8V21h6V17H10a2 2 0 01-2-2V11a2 2 0 012-2h6v2H10v4h4a2 2 0 012 2v4A2 2 0 0114 23z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ib||(Ib=i.createElement("path",{d:"M24.7808,26,25.97,21.2422A1,1,0,0,0,25,20H20V17h5a1,1,0,0,0,.9082-1.4189l-6-13a1.0006,1.0006,0,0,0-1.7021-.19L8.2075,15.3906A1,1,0,0,0,9,17h9v3H7a1,1,0,0,0-.97,1.2422L7.2192,26H2v2H30V26ZM20,7.5527,23.437,15H20ZM11.0308,15,18,5.94V15ZM22.7192,26H9.2808l-1-4H23.7192Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bb||(Bb=i.createElement("path",{d:"M6.9692,25H9.0308l-.75-3H23.7192l-.75,3h2.0616l.9394-3.7578A1,1,0,0,0,25,20H20V17h5a1,1,0,0,0,.9082-1.4189l-6-13a1.0006,1.0006,0,0,0-1.7021-.19L8.2075,15.3906A1,1,0,0,0,9,17h9v3H7a1,1,0,0,0-.97,1.2422ZM20,7.5527,23.437,15H20ZM11.0308,15,18,5.94V15Z"})),Ob||(Ob=i.createElement("path",{d:"M26.9058,25.751A2.998,2.998,0,0,1,24,28a3.4376,3.4376,0,0,1-3.0513-2.3164A1.007,1.007,0,0,0,20,25a.9894.9894,0,0,0-.9468.6787A3.44,3.44,0,0,1,16,28a3.4376,3.4376,0,0,1-3.0513-2.3164A1.007,1.007,0,0,0,12,25a.971.971,0,0,0-.9468.6787A3.44,3.44,0,0,1,8,28a2.998,2.998,0,0,1-2.9058-2.249l-1.9365.498A4.9965,4.9965,0,0,0,8,30a4.9316,4.9316,0,0,0,4-1.9873,5.0192,5.0192,0,0,0,8,0A4.9316,4.9316,0,0,0,24,30a4.9965,4.9965,0,0,0,4.8423-3.751Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fb||(Fb=i.createElement("path",{d:"M28,2V8.0439c-1.9634.1968-6.3162,1.2325-10.5637,6.2764-.198-.2768-.3982-.5464-.5882-.8506C11.9736,5.6714,6.3191,4.2759,4,4.042V2H2V30H4V26.0464a14.8661,14.8661,0,0,0,9.9185-3.96C18.47,27.46,25.2363,28.0381,27.9341,28.0381c.0244,0,.0422-.001.0659-.001V30h2V2Zm0,8.0552v9.99a12.8834,12.8834,0,0,1-9.2756-4.1328C22.5032,11.2666,26.2915,10.26,28,10.0552ZM15.1519,14.53c.3242.5185.663.9907,1.0078,1.4409-.3384.4741-.6753.9707-1.0078,1.5029a16.1346,16.1346,0,0,1-1.0313,1.4531c-.0825-.1372-.1675-.27-.2466-.4126C9.3279,10.3315,5.7871,8.4438,4,8.0684V6.0508C5.9932,6.2905,10.8228,7.6035,15.1519,14.53ZM4,24.0488V10.1406c1.3254.4644,4.2034,2.2847,8.126,9.3448.1894.3413.396.6523.6.9667A12.8784,12.8784,0,0,1,4,24.0488Zm11.3179-3.4209a18.0563,18.0563,0,0,0,1.53-2.0937c.2212-.354.4454-.67.6687-.9951A14.8686,14.8686,0,0,0,28,22.0425v3.9863C25.67,26.019,19.374,25.5088,15.3179,20.6279Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),qb||(qb=i.createElement("path",{d:"M30,2H2V16H8.1113a7.0359,7.0359,0,0,1,3.13.7393L15.7637,19l-4.522,2.2607A7.0359,7.0359,0,0,1,8.1113,22H2v8H9.2231a9.0446,9.0446,0,0,0,4.0249-.95L21.87,24.7393A7.0359,7.0359,0,0,1,25,24h5V14H25a7.0359,7.0359,0,0,1-3.13-.7393L15.3481,10H30ZM8,4H24V8H8ZM4,4H6V14H4ZM4,24H6v4H4Zm16.9751-1.05-8.6216,4.3105A7.0359,7.0359,0,0,1,9.2231,28H8V24h.1113a9.0446,9.0446,0,0,0,4.0249-.95L18,20.1182l1.8638.9316a9.0446,9.0446,0,0,0,4.0249.95H24v.0586A9.0515,9.0515,0,0,0,20.9751,22.95ZM28,22H26V16h2ZM12.3535,10.7393l8.6216,4.31A9.0515,9.0515,0,0,0,24,15.9414V20h-.1113a7.0359,7.0359,0,0,1-3.13-.7393l-8.6221-4.31A9.0446,9.0446,0,0,0,8.1113,14H8V10H9.2231A7.0359,7.0359,0,0,1,12.3535,10.7393ZM28,8H26V4h2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xb||(Xb=i.createElement("path",{d:"M22.9141,16.5l2.7929-2.793a.9994.9994,0,0,0,0-1.414L23.4141,10,25.5,7.9141,28.5859,11,30,9.5859,22.4141,2,21,3.4141,24.0859,6.5,22,8.5859,19.707,6.293a.9994.9994,0,0,0-1.414,0L15.5,9.0859,8.707,2.293a.9994.9994,0,0,0-1.414,0l-5,5a.9994.9994,0,0,0,0,1.414L9.0859,15.5,6.293,18.293a.9994.9994,0,0,0,0,1.414L8.5859,22,6.5,24.0859,3.4141,21,2,22.4141,9.5859,30,11,28.5859,7.9141,25.5,10,23.4141l2.293,2.2929a.9995.9995,0,0,0,1.414,0L16.5,22.9141l6.793,6.7929a.9995.9995,0,0,0,1.414,0l5-5a.9994.9994,0,0,0,0-1.414ZM4.4141,8,8,4.4141,10.0859,6.5,6.5,10.0859Zm3.5,3.5L11.5,7.9141,14.0859,10.5,10.5,14.0859ZM13,23.5859,8.4141,19,19,8.4141,23.5859,13ZM17.9141,21.5,21.5,17.9141,24.0859,20.5,20.5,24.0859ZM24,27.5859,21.9141,25.5,25.5,21.9141,27.5859,24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Cb||(Cb=i.createElement("path",{d:"M30,14H28A10.0113,10.0113,0,0,0,18,4V2A12.0137,12.0137,0,0,1,30,14Z"})),Hb||(Hb=i.createElement("path",{d:"M26 14H24a6.0067 6.0067 0 00-6-6V6A8.0092 8.0092 0 0126 14zM16 28V24.96a9.9124 9.9124 0 007.3179-2.208 1.8482 1.8482 0 00.6777-1.3344 1.8 1.8 0 00-.5239-1.36L18.4141 15 21 12.4141 19.5859 11 17 13.5859 11.9419 8.5273a1.8145 1.8145 0 00-1.36-.5229 1.845 1.845 0 00-1.3339.6782 9.9566 9.9566 0 00-.5127 11.95L6.2793 28H2v2H30V28zM10.68 10.0938L21.9058 21.32A8.0011 8.0011 0 0110.68 10.0938zM14 28H8.3875l1.8757-5.627A9.9894 9.9894 0 0014 24.5435z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kb||(kb=i.createElement("path",{d:"M26.5 12H19a4 4 0 010-8h.0835A4.7864 4.7864 0 0123 2a4.9816 4.9816 0 014.6543 3.2034A3.4667 3.4667 0 0130 8.5 3.5041 3.5041 0 0126.5 12zM19 6a2 2 0 000 4h7.5A1.5017 1.5017 0 0028 8.5a1.4855 1.4855 0 00-1.2778-1.4739L26.061 6.927l-.1616-.6487a2.9568 2.9568 0 00-5.4873-.7121L20.1143 6zM13 28V24.8882a7.9363 7.9363 0 004.707-2.2818.9995.9995 0 000-1.414L13.4644 16.95 16 14.4141 14.5859 13 12.05 15.5356 7.8076 11.293a.9994.9994 0 00-1.414 0 7.9993 7.9993 0 000 11.3134c.1621.1622.3327.3125.5058.459L4.4321 28H2v2H30V28zm-2 0H6.6685L8.59 24.1567A7.8927 7.8927 0 0011 24.873zM7.8076 21.1924a6.0036 6.0036 0 01-.6489-7.72l8.3686 8.3681a6.0026 6.0026 0 01-7.72-.6484z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vw);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Nb||(Nb=i.createElement("path",{d:"M13.9,4.6l-2.5-2.5C11.3,2.1,11.1,2,11,2H3C2.4,2,2,2.4,2,3v10c0,0.6,0.4,1,1,1h10c0.6,0,1-0.4,1-1V5 C14,4.9,13.9,4.7,13.9,4.6z M6,3h4v2H6V3z M10,13H6V9h4V13z M11,13V9c0-0.6-0.4-1-1-1H6C5.4,8,5,8.4,5,9v4H3V3h2v2c0,0.6,0.4,1,1,1 h4c0.6,0,1-0.4,1-1V3.2l2,2V13H11z"})),_):20===a||"20"===a||"20px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},n),Zb||(Zb=i.createElement("path",{d:"M17.8,5.5l-3.3-3.3C14.3,2.1,14.2,2,14,2H3.3C2.6,2,2,2.6,2,3.3v13.3C2,17.4,2.6,18,3.3,18h13.3c0.7,0,1.4-0.5,1.4-1.2V6.1 C18,5.7,17.9,5.7,17.8,5.5z M7.3,3.3h5.3v3.3H7.3V3.3z M12.7,16.7H7.3v-5.3h5.3L12.7,16.7L12.7,16.7z M14,16.7v-5.3 c0-0.7-0.6-1.3-1.3-1.3H7.3C6.6,10,6,10.6,6,11.3v5.3H3.3V3.3H6v3.3C6,7.4,6.6,8,7.3,8h5.3C13.4,8,14,7.4,14,6.7v-3l2.7,2.7v10.4 L14,16.7L14,16.7z"})),_):24===a||"24"===a||"24px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),Yb||(Yb=i.createElement("path",{d:"M20.8,7L17,3.2C16.9,3.1,16.7,3,16.5,3h-12C3.7,3,3,3.7,3,4.5v15C3,20.3,3.7,21,4.5,21h15c0.8,0,1.5-0.7,1.5-1.5v-12 C21,7.3,20.9,7.1,20.8,7z M9,4.5h6v3H9V4.5z M15,19.5H9v-6h6V19.5z M16.5,19.5v-6c0-0.8-0.7-1.5-1.5-1.5H9c-0.8,0-1.5,0.7-1.5,1.5v6 h-3v-15h3v3C7.5,8.3,8.2,9,9,9h6c0.8,0,1.5-0.7,1.5-1.5V4.8l3,3v11.7H16.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pb||(Pb=i.createElement("path",{d:"M27.71,9.29l-5-5A1,1,0,0,0,22,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V10A1,1,0,0,0,27.71,9.29ZM12,6h8v4H12Zm8,20H12V18h8Zm2,0V18a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2v8H6V6h4v4a2,2,0,0,0,2,2h8a2,2,0,0,0,2-2V6.41l4,4V26Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Aw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jb||(jb=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),Kb||(Kb=i.createElement("path",{d:"M28,20H25V18h3V4H8V7H6V4A2,2,0,0,1,8,2H28a2,2,0,0,1,2,2V18A2,2,0,0,1,28,20Z"})),Gb||(Gb=i.createElement("path",{d:"M20 6H26V8H20zM22 10H26V12H22z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Tw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qb||(Qb=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),Jb||(Jb=i.createElement("path",{d:"M28,20H25V18h3V4H14V7H12V4a2,2,0,0,1,2-2H28a2,2,0,0,1,2,2V18A2,2,0,0,1,28,20Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ww);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$b||($b=i.createElement("path",{d:"M26,20l1.4272,1.9028L23,26.9629l-4.4272-5.06L20,20h6m1-2H19l-3,4,7,8,7-8-3-4Z"})),ep||(ep=i.createElement("path",{d:"M16,26H12V18h2V16H12a2,2,0,0,0-2,2v8H6V6h4v4a2,2,0,0,0,2,2h8a2,2,0,0,0,2-2V6.41l4,4V16h2V10a1,1,0,0,0-.29-.71l-5-5A.9989.9989,0,0,0,22,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H16ZM12,6h8v4H12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ip||(ip=i.createElement("path",{d:"M21.56,15.1l-3.48-4.35A2,2,0,0,0,16.52,10H4a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V16.35A2,2,0,0,0,21.56,15.1ZM9,12h6v3H9Zm6,16H9V22h6Zm2,0V22a2,2,0,0,0-2-2H9a2,2,0,0,0-2,2v6H4V12H7v3a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V12.6l3,3.75V28Z"})),tp||(tp=i.createElement("path",{d:"M27,21H25V7H11V5H25a2,2,0,0,1,2,2Z"})),_p||(_p=i.createElement("path",{d:"M32,14H30V2H18V0H30a2,2,0,0,1,2,2Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Iw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sp||(sp=i.createElement("path",{d:"M13,17H7a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V19A2,2,0,0,0,13,17ZM7,25V19h6v6Z"})),ap||(ap=i.createElement("path",{d:"M19,21v2h6a2,2,0,0,0,2-2V7a2,2,0,0,0-2-2H11A2,2,0,0,0,9,7v6h2V7H25V21"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),np||(np=i.createElement("path",{d:"M20,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L25.896,7.5562a.8913.8913,0,0,0-.0454-.0816A1,1,0,0,0,25,7H18.8218A3.0155,3.0155,0,0,0,17,5.1841V2H15V5.1841A3.0155,3.0155,0,0,0,13.1782,7H7a1,1,0,0,0-.8945.5527l-4,8A1,1,0,0,0,2,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L8.6182,9h4.56A3.0147,3.0147,0,0,0,15,10.8154V28H6v2H26V28H17V10.8159A3.0155,3.0155,0,0,0,18.8218,9h4.56l-3.2763,6.5527A1,1,0,0,0,20,16ZM7,19a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,7,19Zm2.3821-4H4.6179L7,10.2363ZM16,9a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,16,9Zm9,10a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,25,19Zm0-8.7637L27.3821,15H22.6179Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ow);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rp||(rp=i.createElement("path",{d:"M20,13a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473l-4-8a1,1,0,0,0-1.2109-.5014l-6.3308,2.11A3.0322,3.0322,0,0,0,17,5.1841V2H15V5.1841a2.9949,2.9949,0,0,0-1.9956,2.76l-6.3208,2.107a1,1,0,0,0-.5781.5014l-4,8A1,1,0,0,0,2,19a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L8.41,11.584l5.237-1.7456A3.0285,3.0285,0,0,0,15,10.8154V28H6v2H26V28H17V10.8159a2.9951,2.9951,0,0,0,1.9956-2.76l4.03-1.3438-2.92,5.8408A1,1,0,0,0,20,13ZM7,22a2.9956,2.9956,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,7,22Zm2.3821-4H4.6179L7,13.2363ZM16,9a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,16,9Zm9,7a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,25,16Zm0-8.7637L27.3821,12H22.6179Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),lp||(lp=i.createElement("path",{d:"M28.83,5.17a4.1,4.1,0,0,0-5.66,0L.34,28H9.59a5,5,0,0,0,3.53-1.46L28.83,10.83a4,4,0,0,0,0-5.66ZM12.29,18.88l2.09-2.09,2.83,2.83-2.09,2.09Zm-.58,6.24A3,3,0,0,1,9.59,26H5.17l5.71-5.71,2.83,2.83ZM27.41,9.41l-8.79,8.8-2.83-2.83,8.8-8.79a2,2,0,0,1,2.82,0,2,2,0,0,1,0,2.82Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dp||(dp=i.createElement("path",{d:"M28.8281 7.1338a4.0941 4.0941 0 00-5.6562 0L.3433 29.9619H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.79a3.9984 3.9984 0 000-5.6562zM12.2928 20.8406l2.086-2.0858 2.8293 2.8293L15.1224 23.67zM11.71 27.083a2.9824 2.9824 0 01-2.1215.8789H5.1714l5.7073-5.7072 2.83 2.83zM27.4141 11.376L18.6221 20.17l-2.8293-2.8292 8.7931-8.7928a2.0471 2.0471 0 012.8282 0 1.9993 1.9993 0 010 2.8281zM13 4L4 4 4 13 6 13 6 6 13 6 13 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),op||(op=i.createElement("path",{d:"M28.8281 7.1338a4.0941 4.0941 0 00-5.6562 0L.3433 29.9619H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.79a3.9984 3.9984 0 000-5.6562zM12.2928 20.8406l2.086-2.0858 2.8293 2.8293L15.1224 23.67zM11.71 27.083a2.9824 2.9824 0 01-2.1215.8789H5.1714l5.7073-5.7072 2.83 2.83zM27.4141 11.376L18.6221 20.17l-2.8293-2.8292 8.7931-8.7928a2.0471 2.0471 0 012.8282 0 1.9993 1.9993 0 010 2.8281zM11 2H7a4.9843 4.9843 0 00-3.8633 8.1528A2.9586 2.9586 0 003 11a2.9945 2.9945 0 002 2.8154V14a2.0025 2.0025 0 01-2 2H2v2H3a4.0045 4.0045 0 004-4v-.1841A2.9959 2.9959 0 008.8157 12H11A5 5 0 0011 2zM6 12a1 1 0 111-1A1.0009 1.0009 0 016 12zm5-2H8.8157A2.974 2.974 0 004.394 8.4746 2.9908 2.9908 0 017 4h4a3 3 0 010 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Cw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),mp||(mp=i.createElement("path",{d:"M28.8281 7.1719a4.0941 4.0941 0 00-5.6562 0L.3433 30H9.5889a4.9682 4.9682 0 003.5356-1.4648L28.8281 12.8281a3.9984 3.9984 0 000-5.6562zM12.2928 20.8787l2.086-2.0859 2.8293 2.8294-2.0857 2.0862zM11.71 27.1211A2.9824 2.9824 0 019.5889 28H5.1714l5.7073-5.7072 2.83 2.83zm15.7037-15.707l-8.792 8.7939-2.8293-2.8292 8.7931-8.7929a2.0473 2.0473 0 012.8282 0 1.9995 1.9995 0 010 2.8282zM15 2a2.9948 2.9948 0 00-2.8157 2H7.8156A2.9925 2.9925 0 104 7.8154v4.3687a3 3 0 102 0V7.8159A2.9959 2.9959 0 007.8156 6h4.3686A2.9947 2.9947 0 1015 2zM5 16a1 1 0 111-1A1.0008 1.0008 0 015 16zM5 6A1 1 0 116 5 1.0008 1.0008 0 015 6zM15 6a1 1 0 111-1A1.0008 1.0008 0 0115 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vp||(vp=i.createElement("path",{d:"M21,29H5a2,2,0,0,1-2-2V5A2,2,0,0,1,5,3H21V5H5V27H21Z"})),cp||(cp=i.createElement("path",{d:"M15 9H17V23H15zM27 9H29V23H27zM21 9H23V23H21z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),up||(up=i.createElement("path",{d:"M22 24H10a2 2 0 01-2-2V19h2v3H22V19h2v3A2 2 0 0122 24zM2 15H30V17H2zM24 13H22V10H10v3H8V10a2 2 0 012-2H22a2 2 0 012 2zM30 10L28 10 28 4 22 4 22 2 30 2 30 10zM4 10L2 10 2 2 10 2 10 4 4 4 4 10zM10 30L2 30 2 22 4 22 4 28 10 28 10 30zM30 30L22 30 22 28 28 28 28 22 30 22 30 30z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),fp||(fp=i.createElement("path",{d:"M29.3826 2.0762a.9993.9993 0 00-1.09.2168l-26 26A1 1 0 003 30h8V28H5.4143l4-4H22a2.0021 2.0021 0 002-2V9.4146l4-4V11h2V3A1 1 0 0029.3826 2.0762zM22 22H11.4143L22 11.4146zM10 17.7554V10h7.7554l2-2H10a2.0025 2.0025 0 00-2 2v9.7554zM11 2L2 2 2 11 4 11 4 4 11 4 11 2zM21 30L30 30 30 21 28 21 28 28 21 28 21 30zM4 23.755L4 21 2 21 2 25.754 4 23.755zM25.755 2L21 2 21 4 23.755 4 25.755 2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bp||(bp=i.createElement("circle",{cx:"9.5",cy:"9.5",r:"2.5"})),pp||(pp=i.createElement("circle",{cx:"9.5",cy:"22.5",r:"2.5"})),gp||(gp=i.createElement("circle",{cx:"22.5",cy:"22.5",r:"2.5"})),Ep||(Ep=i.createElement("path",{d:"M28,2H4A2.0023,2.0023,0,0,0,2,4V28a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V4A2.0023,2.0023,0,0,0,28,2Zm0,13H17V4H28ZM15,4V15H4V4ZM4,17H15V28H4ZM17,28V17H28V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wp||(wp=i.createElement("path",{d:"M27,19.001A4.0056,4.0056,0,0,0,22.9991,15H9.0011A2.0031,2.0031,0,0,1,7,12.9991V9.858A3.9949,3.9949,0,0,0,9.8581,7h12.284a4,4,0,1,0,0-2H9.8581A3.9916,3.9916,0,1,0,5,9.858v3.1411A4.0057,4.0057,0,0,0,9.0011,17h13.998A2.003,2.003,0,0,1,25,19.001V22H22v3H9.8581a4,4,0,1,0,0,2H22v3h8V22H27ZM26,4a2,2,0,1,1-2,2A2.0019,2.0019,0,0,1,26,4ZM4,6A2,2,0,1,1,6,8,2.0019,2.0019,0,0,1,4,6ZM6,28a2,2,0,1,1,2-2A2.002,2.002,0,0,1,6,28Zm22-4v4H24V24Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Pw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hp||(hp=i.createElement("path",{d:"M27,19c-0.3,0-0.7,0.1-1,0.2L20.4,12c1-1.1,1.6-2.5,1.6-4c0-3.3-2.7-6-6-6s-6,2.7-6,6c0,1.6,0.6,3,1.6,4L6,19.2 C5.7,19.1,5.3,19,5,19c-1.7,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3c0-0.6-0.2-1.1-0.5-1.6l5.6-7.1c0.6,0.3,1.2,0.5,1.9,0.6v10.3 c-1.2,0.4-2,1.5-2,2.8c0,1.7,1.3,3,3,3s3-1.3,3-3c0-1.3-0.8-2.4-2-2.8V13.9c0.7-0.1,1.3-0.3,1.9-0.6l5.6,7.1c-0.3,0.5-0.5,1-0.5,1.6 c0,1.7,1.3,3,3,3s3-1.3,3-3S28.7,19,27,19z M16,4c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4S13.8,4,16,4z M5,23c-0.6,0-1-0.4-1-1 s0.4-1,1-1s1,0.4,1,1S5.6,23,5,23z M16,28c-0.6,0-1-0.4-1-1s0.4-1,1-1s1,0.4,1,1S16.6,28,16,28z M27,23c-0.6,0-1-0.4-1-1s0.4-1,1-1 s1,0.4,1,1S27.6,23,27,23z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xp||(xp=i.createElement("path",{d:"M23,23v3H8.5a4.5,4.5,0,0,1,0-9H9V15H8.5a6.5,6.5,0,0,0,0,13H23v3h8V23Zm6,6H25V25h4Z"})),zp||(zp=i.createElement("path",{d:"M21 22H19V19H13v3H11V19a2.0023 2.0023 0 012-2h6a2.0023 2.0023 0 012 2zM16 16a3 3 0 113-3A3.0033 3.0033 0 0116 16zm0-4a1 1 0 101 1A1.0013 1.0013 0 0016 12z"})),Lp||(Lp=i.createElement("path",{d:"M23.5,4H9V1H1V9H9V6H23.5a4.5,4.5,0,0,1,0,9H23v2h.5a6.5,6.5,0,0,0,0-13ZM7,7H3V3H7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mp||(Mp=i.createElement("path",{d:"M26 28a4 4 0 114-4A4.0045 4.0045 0 0126 28zm0-6a2 2 0 102 2A2.0023 2.0023 0 0026 22zM24 8H18v2h6a1 1 0 010 2H21a1 1 0 00-.98 1.1963l.9241 4.6211L18.4338 22h-2.69l-2.5723-8.5752A1.988 1.988 0 0011.2559 12H6v2h5.2561l.6 2H7a5.0057 5.0057 0 00-5 5v2a1 1 0 001 1H4a4 4 0 008 0h7a1 1 0 00.8574-.4854l3-5a1 1 0 00.1231-.7109L22.22 14H24a3 3 0 000-6zM8 26a2.0025 2.0025 0 01-2-2h4A2.0025 2.0025 0 018 26zM4 22V21a3.0033 3.0033 0 013-3h5.4561l1.2 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rp||(Rp=i.createElement("path",{d:"M15 19H17V28H15z"})),Sp||(Sp=i.createElement("path",{d:"M23,10V8H20a2.0025,2.0025,0,0,0-2-2H14a2.0025,2.0025,0,0,0-2,2H9v2h3v4.1841A2.9957,2.9957,0,0,0,10,17v7h2V17a1.0008,1.0008,0,0,1,1-1h6a1.0008,1.0008,0,0,1,1,1v7h2V17a2.9957,2.9957,0,0,0-2-2.8159V10ZM18,8v6H14V8Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dp||(Dp=i.createElement("path",{d:"M28,4H4A2,2,0,0,0,2,6V22a2,2,0,0,0,2,2h8v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V6A2,2,0,0,0,28,4ZM18,28H14V24h4Zm10-6H4V6H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jw);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yp||(yp=i.createElement("path",{d:"M28,22H11.41L30,3.41,28.59,2l-2,2H4A2,2,0,0,0,2,6V22H4V6H24.59L2,28.59,3.41,30l6-6H12v4H8v2H24V28H20V24h8a2,2,0,0,0,2-2V9H28ZM18,28H14V24h4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$w);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vp||(Vp=i.createElement("path",{d:"M18.83 26L21.41 23.42 20 22 16 26 20 30 21.42 28.59 18.83 26zM27.17 26L24.59 28.58 26 30 30 26 26 22 24.58 23.41 27.17 26z"})),Ap||(Ap=i.createElement("path",{d:"M14,28H8V4h8v6a2.0058,2.0058,0,0,0,2,2h6v6h2V10a.9092.9092,0,0,0-.3-.7l-7-7A.9087.9087,0,0,0,18,2H8A2.0058,2.0058,0,0,0,6,4V28a2.0058,2.0058,0,0,0,2,2h6ZM18,4.4,23.6,10H18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,eh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Tp||(Tp=i.createElement("path",{d:"M4 20L4 22 8.586 22 2 28.586 3.414 30 10 23.414 10 28 12 28 12 20 4 20zM27.17 26L24.59 28.58 26 30 30 26 26 22 24.58 23.41 27.17 26zM18.83 26L21.41 23.42 20 22 16 26 20 30 21.42 28.59 18.83 26zM25.7 9.3l-7-7A.9087.9087 0 0018 2H8A2.0058 2.0058 0 006 4V16H8V4h8v6a2.0058 2.0058 0 002 2h6v6h2V10A.9092.9092 0 0025.7 9.3zM18 10V4.4L23.6 10z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ih);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Wp||(Wp=i.createElement("path",{d:"M30 9L27.9 9 24 15.6 24 9 22 9 22 23 24 23 24 18.7 24.9 17.2 27.9 23 30 23 26.1 15.4 30 9zM16 23H12V9h4a4.0118 4.0118 0 014 4v6A4.0118 4.0118 0 0116 23zm-2-2h2a2.0059 2.0059 0 002-2V13a2.0059 2.0059 0 00-2-2H14zM8 23H2V21H8V17H4a2.0059 2.0059 0 01-2-2V11A2.0059 2.0059 0 014 9h6v2H4v4H8a2.0059 2.0059 0 012 2v4A2.0059 2.0059 0 018 23z"})),_)})).propTypes=da;var rx,lx=i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,th);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),Up||(Up=i.createElement("path",{d:"M15,14.3L10.7,10c1.9-2.3,1.6-5.8-0.7-7.7S4.2,0.7,2.3,3S0.7,8.8,3,10.7c2,1.7,5,1.7,7,0l4.3,4.3L15,14.3z M2,6.5 C2,4,4,2,6.5,2S11,4,11,6.5S9,11,6.5,11S2,9,2,6.5z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ip||(Ip=i.createElement("path",{d:"M29,27.5859l-7.5521-7.5521a11.0177,11.0177,0,1,0-1.4141,1.4141L27.5859,29ZM4,13a9,9,0,1,1,9,9A9.01,9.01,0,0,1,4,13Z"})),_)}));lx.propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_h);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Bp||(Bp=i.createElement("path",{d:"M30 6L26 6 26 2 24 2 24 6 20 6 20 8 24 8 24 12 26 12 26 8 30 8 30 6zM24 28.5859l-5.9751-5.9751a9.0234 9.0234 0 10-1.4141 1.4141L22.5859 30zM4 17a7 7 0 117 7A7.0078 7.0078 0 014 17z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Op||(Op=i.createElement("path",{d:"M30 28.5859l-4.6885-4.6884a8.028 8.028 0 10-1.414 1.414L28.5859 30zM19 25a6 6 0 116-6A6.0066 6.0066 0 0119 25zM2 12H10V14H2zM2 2H18V4H2zM2 7H18V9H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ah);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fp||(Fp=i.createElement("path",{d:"M14 16.59L11.41 14 10 15.41 14 19.41 22 11.41 20.59 10 14 16.59z"})),qp||(qp=i.createElement("path",{d:"M16,30,9.8242,26.7071A10.9818,10.9818,0,0,1,4,17V4A2.0021,2.0021,0,0,1,6,2H26a2.0021,2.0021,0,0,1,2,2V17a10.9818,10.9818,0,0,1-5.8242,9.7071ZM6,4V17a8.9852,8.9852,0,0,0,4.7656,7.9423L16,27.7333l5.2344-2.791A8.9852,8.9852,0,0,0,26,17V4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Xp||(Xp=i.createElement("path",{d:"M30,24V22H27.8989a4.9678,4.9678,0,0,0-.7319-1.7529l1.49-1.49-1.414-1.414-1.49,1.49A4.9678,4.9678,0,0,0,24,18.1011V16H22v2.1011a4.9678,4.9678,0,0,0-1.7529.7319l-1.49-1.49-1.414,1.414,1.49,1.49A4.9678,4.9678,0,0,0,18.1011,22H16v2h2.1011a4.9678,4.9678,0,0,0,.7319,1.7529l-1.49,1.49,1.414,1.414,1.49-1.49A4.9678,4.9678,0,0,0,22,27.8989V30h2V27.8989a4.9678,4.9678,0,0,0,1.7529-.7319l1.49,1.49,1.414-1.414-1.49-1.49A4.9678,4.9678,0,0,0,27.8989,24Zm-7,2a3,3,0,1,1,3-3A3.0033,3.0033,0,0,1,23,26Z"})),Cp||(Cp=i.createElement("path",{d:"M14,26.667l-3.2344-1.7246A8.9858,8.9858,0,0,1,6,17V4H26V14h2V4a2.0023,2.0023,0,0,0-2-2H6A2.0023,2.0023,0,0,0,4,4V17a10.9814,10.9814,0,0,0,5.8242,9.707L14,28.9336Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,rh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hp||(Hp=i.createElement("path",{d:"M12 6L8 6 8 2 6 2 6 6 2 6 2 8 6 8 6 12 8 12 8 8 12 8 12 6zM16 6H20V8H16zM24 6V8h4v4h2V8a2 2 0 00-2-2zM6 16H8V20H6zM8 28V24H6v4a2 2 0 002 2h4V28zM28 16H30V20H28zM16 28H20V30H16zM28 24v4H24v2h4a2 2 0 002-2V24z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,lh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),kp||(kp=i.createElement("path",{d:"M12 6L8 6 8 2 6 2 6 6 2 6 2 8 6 8 6 12 8 12 8 8 12 8 12 6zM30 10V4H24V6H16V8h8v2h2V24H24v2H10V24H8V16H6v8H4v6h6V28H24v2h6V24H28V10zM8 28H6V26H8zm20 0H26V26h2zM26 6h2V8H26z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,dh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Np||(Np=i.createElement("path",{d:"M8 26H4a2.0021 2.0021 0 01-2-2V20H4v4H8zM2 12H4V16H2zM26 8H24V4H20V2h4a2.0021 2.0021 0 012 2zM12 2H16V4H12zM4 8H2V4A2.0021 2.0021 0 014 2H8V4H4zM27 32a.9967.9967 0 01-.707-.293l-6.1377-6.1377L16.832 30.5547a1 1 0 01-1.79-.2676l-6-20A1 1 0 0110.2871 9.042l20 6a1 1 0 01.2676 1.79l-4.9854 3.3233L31.707 26.293a.9994.9994 0 010 1.414l-4 4A.9967.9967 0 0127 32zm0-2.4141L29.5859 27 22.431 19.845l5.2458-3.4978L11.4917 11.4917l4.8555 16.1851L19.845 22.431z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,oh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Zp||(Zp=i.createElement("path",{d:"M27.45,15.11l-22-11a1,1,0,0,0-1.08.12,1,1,0,0,0-.33,1L7,16,4,26.74A1,1,0,0,0,5,28a1,1,0,0,0,.45-.11l22-11a1,1,0,0,0,0-1.78Zm-20.9,10L8.76,17H18V15H8.76L6.55,6.89,24.76,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,mh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yp||(Yp=i.createElement("path",{d:"M27.71,4.29a1,1,0,0,0-1.05-.23l-22,8a1,1,0,0,0,0,1.87l9.6,3.84,3.84,9.6A1,1,0,0,0,19,28h0a1,1,0,0,0,.92-.66l8-22A1,1,0,0,0,27.71,4.29ZM19,24.2l-2.79-7L21,12.41,19.59,11l-4.83,4.83L7.8,13,25.33,6.67Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,vh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Pp||(Pp=i.createElement("path",{d:"M27.71,4.29a1,1,0,0,0-1.05-.23l-22,8a1,1,0,0,0,0,1.87l8.59,3.43L19.59,11,21,12.41l-6.37,6.37,3.44,8.59A1,1,0,0,0,19,28h0a1,1,0,0,0,.92-.66l8-22A1,1,0,0,0,27.71,4.29Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ch);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),jp||(jp=i.createElement("path",{d:"M27.45,15.11l-22-11a1,1,0,0,0-1.08.12,1,1,0,0,0-.33,1L6.69,15H18v2H6.69L4,26.74A1,1,0,0,0,5,28a1,1,0,0,0,.45-.11l22-11a1,1,0,0,0,0-1.78Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,uh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Kp||(Kp=i.createElement("path",{d:"M4 7H2V4A2.0023 2.0023 0 014 2H7V4H4zM7 22H4a2.0023 2.0023 0 01-2-2V17H4v3H7zM2 10H4V14H2zM22 7H20V4H17V2h3a2.0023 2.0023 0 012 2zM10 2H14V4H10zM28 30H12a2.0023 2.0023 0 01-2-2V12a2.0023 2.0023 0 012-2H28a2.0023 2.0023 0 012 2V28A2.0023 2.0023 0 0128 30zM12 12V28H28V12z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,fh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gp||(Gp=i.createElement("path",{d:"M28,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6v6a2.0023,2.0023,0,0,0,2,2H28a2.0023,2.0023,0,0,0,2-2V12A2.0023,2.0023,0,0,0,28,10ZM12,28V12H28l.0015,16Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,bh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Qp||(Qp=i.createElement("path",{d:"M16 2a8 8 0 108 8A8.0092 8.0092 0 0016 2zm5.91 7H19.4724a15.2457 15.2457 0 00-.7917-4.36A6.0088 6.0088 0 0121.91 9zM16.022 15.999h-.0076c-.3813-.1206-1.3091-1.8213-1.479-4.999h2.9292C17.2952 14.1763 16.3711 15.877 16.022 15.999zM14.5354 9c.1694-3.1763 1.0935-4.877 1.4426-4.999h.0076c.3813.1206 1.3091 1.8213 1.479 4.999zM13.3193 4.64A15.2457 15.2457 0 0012.5276 9H10.09A6.0088 6.0088 0 0113.3193 4.64zM10.09 11h2.4373a15.2457 15.2457 0 00.7917 4.36A6.0088 6.0088 0 0110.09 11zm8.59 4.36A15.2457 15.2457 0 0019.4724 11H21.91A6.0088 6.0088 0 0118.6807 15.36zM28 30H4a2.0021 2.0021 0 01-2-2V22a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v6A2.0021 2.0021 0 0128 30zM4 22v6H28V22z"})),Jp||(Jp=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ph);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),$p||($p=i.createElement("path",{d:"M6,30H26a2,2,0,0,0,2-2V22a2,2,0,0,0-2-2H6a2,2,0,0,0-2,2v6A2,2,0,0,0,6,30Zm0-8H26v6H6Z"})),eg||(eg=i.createElement("circle",{cx:"9",cy:"25",r:"1"})),ig||(ig=i.createElement("path",{d:"M26,2,24.59,3.41,27.17,6H22.315A6.9835,6.9835,0,0,0,9.08,10H4.83L7.41,7.41,6,6,1,11l5,5,1.41-1.41L4.83,12H9.685A6.9835,6.9835,0,0,0,22.92,8h4.25l-2.58,2.59L26,12l5-5ZM21,9a4.983,4.983,0,0,1-8.9745,3H16V10H11.1011a4.9852,4.9852,0,0,1,8.8734-4H16V8h4.8989A5.0019,5.0019,0,0,1,21,9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,gh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),tg||(tg=i.createElement("path",{d:"M28,30H4a2.0021,2.0021,0,0,1-2-2V22a2.0021,2.0021,0,0,1,2-2H28a2.0021,2.0021,0,0,1,2,2v6A2.0021,2.0021,0,0,1,28,30ZM4,22v6H28V22Z"})),_g||(_g=i.createElement("circle",{cx:"7",cy:"25",r:"1"})),sg||(sg=i.createElement("path",{d:"M19 11.586L17 9.586 17 6 15 6 15 10.414 17.586 13 19 11.586z"})),ag||(ag=i.createElement("path",{d:"M16,18a8,8,0,1,1,8-8A8.0092,8.0092,0,0,1,16,18ZM16,4a6,6,0,1,0,6,6A6.0067,6.0067,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Eh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ng||(ng=i.createElement("path",{d:"M28,24V22A12.01,12.01,0,0,0,17,10.0507V8h3V6H12V8h3v2.0507A12.01,12.01,0,0,0,4,22v2H2v2H30V24ZM16,12a10.0167,10.0167,0,0,1,9.7984,8H6.2015A10.0165,10.0165,0,0,1,16,12ZM6,22H26v2H6Z",transform:"translate(0 .005)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,wh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rg||(rg=i.createElement("path",{d:"M26,8,24.59,9.41,27.17,12H16a5.967,5.967,0,0,0-4,1.54V6.83l2.59,2.58L16,8,11,3,6,8,7.41,9.41,10,6.83V18a5.969,5.969,0,0,0,1.54,4H4.83l2.58-2.59L6,18,1,23l5,5,1.41-1.41L4.83,24H16A5.99,5.99,0,0,0,20.46,14h6.71l-2.58,2.59L26,18l5-5ZM20,18a4,4,0,1,1-4-4A4.0045,4.0045,0,0,1,20,18Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,hh);return 16===a||"16"===a||"16px"===a?i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor"},n),lg||(lg=i.createElement("path",{d:"M13.5,8.4c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3,0-0.4l1-0.8c0.4-0.3,0.4-0.9,0.2-1.3l-1.2-2C13.3,3.2,13,3,12.6,3 c-0.1,0-0.2,0-0.3,0.1l-1.2,0.4c-0.2-0.1-0.4-0.3-0.7-0.4l-0.3-1.3C10.1,1.3,9.7,1,9.2,1H6.8c-0.5,0-0.9,0.3-1,0.8L5.6,3.1 C5.3,3.2,5.1,3.3,4.9,3.4L3.7,3C3.6,3,3.5,3,3.4,3C3,3,2.7,3.2,2.5,3.5l-1.2,2C1.1,5.9,1.2,6.4,1.6,6.8l0.9,0.9c0,0.1,0,0.3,0,0.4 c0,0.1,0,0.3,0,0.4L1.6,9.2c-0.4,0.3-0.5,0.9-0.2,1.3l1.2,2C2.7,12.8,3,13,3.4,13c0.1,0,0.2,0,0.3-0.1l1.2-0.4 c0.2,0.1,0.4,0.3,0.7,0.4l0.3,1.3c0.1,0.5,0.5,0.8,1,0.8h2.4c0.5,0,0.9-0.3,1-0.8l0.3-1.3c0.2-0.1,0.4-0.2,0.7-0.4l1.2,0.4 c0.1,0,0.2,0.1,0.3,0.1c0.4,0,0.7-0.2,0.9-0.5l1.1-2c0.2-0.4,0.2-0.9-0.2-1.3L13.5,8.4z M12.6,12l-1.7-0.6c-0.4,0.3-0.9,0.6-1.4,0.8 L9.2,14H6.8l-0.4-1.8c-0.5-0.2-0.9-0.5-1.4-0.8L3.4,12l-1.2-2l1.4-1.2c-0.1-0.5-0.1-1.1,0-1.6L2.2,6l1.2-2l1.7,0.6 C5.5,4.2,6,4,6.5,3.8L6.8,2h2.4l0.4,1.8c0.5,0.2,0.9,0.5,1.4,0.8L12.6,4l1.2,2l-1.4,1.2c0.1,0.5,0.1,1.1,0,1.6l1.4,1.2L12.6,12z"})),dg||(dg=i.createElement("path",{d:"M8,11c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3C11,9.6,9.7,11,8,11C8,11,8,11,8,11z M8,6C6.9,6,6,6.8,6,7.9C6,7.9,6,8,6,8 c0,1.1,0.8,2,1.9,2c0,0,0.1,0,0.1,0c1.1,0,2-0.8,2-1.9c0,0,0-0.1,0-0.1C10,6.9,9.2,6,8,6C8.1,6,8,6,8,6z"})),_):i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),og||(og=i.createElement("path",{d:"M27,16.76c0-.25,0-.5,0-.76s0-.51,0-.77l1.92-1.68A2,2,0,0,0,29.3,11L26.94,7a2,2,0,0,0-1.73-1,2,2,0,0,0-.64.1l-2.43.82a11.35,11.35,0,0,0-1.31-.75l-.51-2.52a2,2,0,0,0-2-1.61H13.64a2,2,0,0,0-2,1.61l-.51,2.52a11.48,11.48,0,0,0-1.32.75L7.43,6.06A2,2,0,0,0,6.79,6,2,2,0,0,0,5.06,7L2.7,11a2,2,0,0,0,.41,2.51L5,15.24c0,.25,0,.5,0,.76s0,.51,0,.77L3.11,18.45A2,2,0,0,0,2.7,21L5.06,25a2,2,0,0,0,1.73,1,2,2,0,0,0,.64-.1l2.43-.82a11.35,11.35,0,0,0,1.31.75l.51,2.52a2,2,0,0,0,2,1.61h4.72a2,2,0,0,0,2-1.61l.51-2.52a11.48,11.48,0,0,0,1.32-.75l2.42.82a2,2,0,0,0,.64.1,2,2,0,0,0,1.73-1L29.3,21a2,2,0,0,0-.41-2.51ZM25.21,24l-3.43-1.16a8.86,8.86,0,0,1-2.71,1.57L18.36,28H13.64l-.71-3.55a9.36,9.36,0,0,1-2.7-1.57L6.79,24,4.43,20l2.72-2.4a8.9,8.9,0,0,1,0-3.13L4.43,12,6.79,8l3.43,1.16a8.86,8.86,0,0,1,2.71-1.57L13.64,4h4.72l.71,3.55a9.36,9.36,0,0,1,2.7,1.57L25.21,8,27.57,12l-2.72,2.4a8.9,8.9,0,0,1,0,3.13L27.57,20Z"})),mg||(mg=i.createElement("path",{d:"M16,22a6,6,0,1,1,6-6A5.94,5.94,0,0,1,16,22Zm0-10a3.91,3.91,0,0,0-4,4,3.91,3.91,0,0,0,4,4,3.91,3.91,0,0,0,4-4A3.91,3.91,0,0,0,16,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,xh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vg||(vg=i.createElement("path",{d:"M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30V8zM21 12c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3S22.7 12 21 12zM2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2V24zM11 20c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3S9.3 20 11 20z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,zh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cg||(cg=i.createElement("path",{d:"M16,22a6,6,0,1,1,6-6A5.9364,5.9364,0,0,1,16,22Zm0-10a3.9123,3.9123,0,0,0-4,4,3.9123,3.9123,0,0,0,4,4,3.9123,3.9123,0,0,0,4-4A3.9123,3.9123,0,0,0,16,12Z"})),ug||(ug=i.createElement("path",{d:"M29.3047,11.044,26.9441,6.9562a1.9977,1.9977,0,0,0-2.3728-.8946l-2.4341.8233a11.0419,11.0419,0,0,0-1.312-.7583L20.3215,3.608A2,2,0,0,0,18.36,2H13.64A2,2,0,0,0,11.6785,3.608l-.5037,2.5186A10.9666,10.9666,0,0,0,9.8481,6.88L7.4287,6.0616a1.9977,1.9977,0,0,0-2.3728.8946L2.6953,11.044a2.0006,2.0006,0,0,0,.4119,2.5025l1.9309,1.6968C5.021,15.4947,5,15.7447,5,16c0,.2578.01.5127.0278.7656l-1.9206,1.688a2.0006,2.0006,0,0,0-.4119,2.5025L5.0559,25.044a1.9977,1.9977,0,0,0,2.3728.8946l2.4341-.8233a10.9736,10.9736,0,0,0,1.312.7583l.5037,2.5186A2,2,0,0,0,13.64,30H18V28H13.64l-.71-3.5508a9.0953,9.0953,0,0,1-2.6948-1.5713L6.7878,24.044l-2.36-4.0878,2.7253-2.3951a8.9263,8.9263,0,0,1-.007-3.1279L4.4275,12.044,6.7886,7.9562l3.4267,1.1591a9.0305,9.0305,0,0,1,2.7141-1.5644L13.64,4H18.36l.71,3.5508a9.0978,9.0978,0,0,1,2.6948,1.5713l3.4468-1.166,2.36,4.0878-2.7978,2.4522L26.0923,16l2.8-2.4536A2.0006,2.0006,0,0,0,29.3047,11.044Z"})),fg||(fg=i.createElement("path",{d:"M23 26.18L20.41 23.59 19 25 23 29 30 22 28.59 20.59 23 26.18z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Lh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bg||(bg=i.createElement("path",{d:"M29,25H27V23h1V19H24v1H22V18a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v6A1,1,0,0,1,29,25Z"})),pg||(pg=i.createElement("path",{d:"M24 30H18a1 1 0 01-1-1V23a1 1 0 011-1h6a1 1 0 011 1v6A1 1 0 0124 30zm-5-2h4V24H19zM15 19.8579A3.9934 3.9934 0 1120 16h2a6 6 0 10-7 5.91z"})),gg||(gg=i.createElement("path",{d:"M28.89,13.55l-2.31,2.03-1.42-1.42,2.41-2.12L25.21,7.96,21.77,9.12a9.3684,9.3684,0,0,0-2.7-1.57L18.36,4H13.64l-.71,3.55a8.8609,8.8609,0,0,0-2.71,1.57L6.79,7.96,4.43,12.04l2.72,2.39a8.8948,8.8948,0,0,0,0,3.13l-2.72,2.4,2.36,4.08,3.44-1.16a9.3684,9.3684,0,0,0,2.7,1.57L13.64,28H15v2H13.64a2.0007,2.0007,0,0,1-1.96-1.61l-.51-2.52a11.412,11.412,0,0,1-1.31-.75l-2.43.82a2.038,2.038,0,0,1-.64.1,1.973,1.973,0,0,1-1.73-1L2.7,20.96a2,2,0,0,1,.41-2.51l1.92-1.68C5.01,16.51,5,16.26,5,16s.02-.51.04-.76L3.11,13.55a2,2,0,0,1-.41-2.51L5.06,6.96a1.973,1.973,0,0,1,1.73-1,2.038,2.038,0,0,1,.64.1l2.42.82a11.5416,11.5416,0,0,1,1.32-.75l.51-2.52A2.0007,2.0007,0,0,1,13.64,2h4.72a2.0007,2.0007,0,0,1,1.96,1.61l.51,2.52a11.412,11.412,0,0,1,1.31.75l2.43-.82a2.038,2.038,0,0,1,.64-.1,1.973,1.973,0,0,1,1.73,1l2.36,4.08A2,2,0,0,1,28.89,13.55Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Mh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Eg||(Eg=i.createElement("circle",{cx:"23",cy:"24",r:"2"})),wg||(wg=i.createElement("path",{d:"M30.7769 23.4785A8.64 8.64 0 0023 18a8.64 8.64 0 00-7.7769 5.4785L15 24l.2231.5215A8.64 8.64 0 0023 30a8.64 8.64 0 007.7769-5.4785L31 24zM23 28a4 4 0 114-4A4.0045 4.0045 0 0123 28zM12.3989 20.8A6 6 0 1122 16H20a4 4 0 10-6.4 3.2z"})),hg||(hg=i.createElement("path",{d:"M29.3047,11.0439,26.9441,6.9561a1.9977,1.9977,0,0,0-2.3728-.8946l-2.4341.8233a11.0419,11.0419,0,0,0-1.312-.7583l-.5037-2.5186A2,2,0,0,0,18.36,2H13.64a2,2,0,0,0-1.9611,1.6079l-.5037,2.5186A10.9666,10.9666,0,0,0,9.8481,6.88L7.4287,6.0615a1.9977,1.9977,0,0,0-2.3728.8946L2.6953,11.0439a2.0006,2.0006,0,0,0,.4119,2.5025l1.9309,1.6968C5.021,15.4946,5,15.7446,5,16c0,.2578.01.5127.0278.7656l-1.9206,1.688a2.0006,2.0006,0,0,0-.4119,2.5025l2.3606,4.0878a1.9977,1.9977,0,0,0,2.3728.8946l2.4341-.8233a10.9736,10.9736,0,0,0,1.312.7583l.5037,2.5186A2,2,0,0,0,13.64,30H15V28H13.64l-.71-3.5508a9.0953,9.0953,0,0,1-2.6948-1.5713l-3.4468,1.166-2.36-4.0878L7.1528,17.561a8.9263,8.9263,0,0,1-.007-3.1279L4.4275,12.0439,6.7886,7.9561l3.4267,1.1591a9.0305,9.0305,0,0,1,2.7141-1.5644L13.64,4H18.36l.71,3.5508a9.0978,9.0978,0,0,1,2.6948,1.5713l3.4468-1.166,2.36,4.0878-2.7978,2.4522L26.0923,16l2.8-2.4536A2.0006,2.0006,0,0,0,29.3047,11.0439Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Rh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xg||(xg=i.createElement("path",{d:"M28,10H22V4a2.0023,2.0023,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10ZM12,20V12h8v8ZM3.9988,4H20v6H12a2.0023,2.0023,0,0,0-2,2v8H4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Sh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zg||(zg=i.createElement("path",{d:"M12,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6V12A2,2,0,0,1,12,10Z"})),Lg||(Lg=i.createElement("path",{d:"M28,10H22V20a2,2,0,0,1-2,2H10v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Dh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Mg||(Mg=i.createElement("path",{d:"M28,10H22V4a2.0025,2.0025,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2.0025,2.0025,0,0,0,2,2H28a2.0025,2.0025,0,0,0,2-2V12A2.0025,2.0025,0,0,0,28,10ZM4,20V4H20v6H12a2.0025,2.0025,0,0,0-2,2v8Zm8,8V22h8a2.0025,2.0025,0,0,0,2-2V12h6V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,yh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Rg||(Rg=i.createElement("path",{d:"M28,10H22V4a2.0025,2.0025,0,0,0-2-2H4A2.0025,2.0025,0,0,0,2,4V20a2.0025,2.0025,0,0,0,2,2h6v6a2.0025,2.0025,0,0,0,2,2H28a2.0025,2.0025,0,0,0,2-2V12A2.0025,2.0025,0,0,0,28,10ZM4,20V4h6V20Zm18,8V12h6V28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Vh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Sg||(Sg=i.createElement("path",{d:"M28,10H22V4a2,2,0,0,0-2-2H4A2,2,0,0,0,2,4V20a2,2,0,0,0,2,2h6v6a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ah);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Dg||(Dg=i.createElement("path",{d:"M23,20a5,5,0,0,0-3.89,1.89L11.8,17.32a4.46,4.46,0,0,0,0-2.64l7.31-4.57A5,5,0,1,0,18,7a4.79,4.79,0,0,0,.2,1.32l-7.31,4.57a5,5,0,1,0,0,6.22l7.31,4.57A4.79,4.79,0,0,0,18,25a5,5,0,1,0,5-5ZM23,4a3,3,0,1,1-3,3A3,3,0,0,1,23,4ZM7,19a3,3,0,1,1,3-3A3,3,0,0,1,7,19Zm16,9a3,3,0,1,1,3-3A3,3,0,0,1,23,28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Th);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yg||(yg=i.createElement("path",{d:"M27 25H21a3 3 0 00-3 3v2h2V28a1 1 0 011-1h6a1 1 0 011 1v2h2V28A3 3 0 0027 25zM20 20a4 4 0 104-4A4 4 0 0020 20zm6 0a2 2 0 11-2-2A2 2 0 0126 20zM6 21V20H4v1a7 7 0 007 7h3V26H11A5 5 0 016 21zM19 10H26V12H19zM19 6H29V8H19zM19 2H29V4H19zM11 11H5a3 3 0 00-3 3v2H4V14a1 1 0 011-1h6a1 1 0 011 1v2h2V14A3 3 0 0011 11zM8 10A4 4 0 104 6 4 4 0 008 10zM8 4A2 2 0 116 6 2 2 0 018 4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Wh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Vg||(Vg=i.createElement("path",{d:"M28.76,11.35A1,1,0,0,0,28,11H22V7a3,3,0,0,0-3-3H13a3,3,0,0,0-3,3v4H4a1,1,0,0,0-1,1.15L4.88,24.3a2,2,0,0,0,2,1.7H25.14a2,2,0,0,0,2-1.7L29,12.15A1,1,0,0,0,28.76,11.35ZM12,7a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v4H12ZM25.14,24H6.86L5.17,13H26.83Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Uh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ag||(Ag=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Tg||(Tg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Wg||(Wg=i.createElement("path",{d:"M28,7H5.82L5,2.8A1,1,0,0,0,4,2H0V4H3.18L7,23.2A1,1,0,0,0,8,24H26V22H8.82L8,18H26a1,1,0,0,0,1-.78l2-9A1,1,0,0,0,28,7Zm-2.8,9H7.62L6.22,9H26.75Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ih);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Ug||(Ug=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Ig||(Ig=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Bg||(Bg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Og||(Og=i.createElement("path",{d:"M21.586 6.586L18 10.172 18 2 16 2 16 10.172 12.414 6.586 11 8 17 14 23 8 21.586 6.586z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Bh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Fg||(Fg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),qg||(qg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Xg||(Xg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Cg||(Cg=i.createElement("path",{d:"M21.586 9.414L18 5.828 18 14 16 14 16 5.828 12.414 9.414 11 8 17 2 23 8 21.586 9.414z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Oh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Hg||(Hg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),kg||(kg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Ng||(Ng=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Zg||(Zg=i.createElement("path",{d:"M18.41 8L22 4.41 20.59 3 17 6.59 13.41 3 12 4.41 15.59 8 12 11.59 13.41 13 17 9.41 20.59 13 22 11.59 18.41 8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Fh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Yg||(Yg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Pg||(Pg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),jg||(jg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),Kg||(Kg=i.createElement("path",{d:"M17,2a6,6,0,1,0,6,6A6.0066,6.0066,0,0,0,17,2Zm0,2a3.9521,3.9521,0,0,1,2.019.5669L13.5669,10.019A3.9529,3.9529,0,0,1,13,8,4.0045,4.0045,0,0,1,17,4Zm0,8a3.9521,3.9521,0,0,1-2.019-.5669L20.4331,5.981A3.9529,3.9529,0,0,1,21,8,4.0045,4.0045,0,0,1,17,12Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,qh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),Gg||(Gg=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),Qg||(Qg=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),Jg||(Jg=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),$g||($g=i.createElement("path",{d:"M12 6L12 8 22 8 22 6 12 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Xh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),eE||(eE=i.createElement("circle",{cx:"10",cy:"28",r:"2"})),iE||(iE=i.createElement("circle",{cx:"24",cy:"28",r:"2"})),tE||(tE=i.createElement("path",{d:"M4.9806,2.8039A1,1,0,0,0,4,2H0V4H3.18L7.0194,23.1961A1,1,0,0,0,8,24H26V22H8.82l-.8-4H26a1,1,0,0,0,.9762-.783L29.2445,7H27.1971l-1.9989,9H7.62Z"})),_E||(_E=i.createElement("path",{d:"M18 6L18 2 16 2 16 6 12 6 12 8 16 8 16 12 18 12 18 8 22 8 22 6 18 6z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ch);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),sE||(sE=i.createElement("path",{d:"M17 24H21V28H17zM24 24H28V28H24zM17 17H21V21H17zM24 17H28V21H24z"})),aE||(aE=i.createElement("path",{d:"M28,11h-6V7c0-1.7-1.3-3-3-3h-6c-1.7,0-3,1.3-3,3v4H4c-0.6,0-1,0.4-1,1c0,0.1,0,0.1,0,0.2l1.9,12.1c0.1,1,1,1.7,2,1.7H15v-2 H6.9L5.2,13H28V11z M12,7c0-0.6,0.4-1,1-1h6c0.6,0,1,0.4,1,1v4h-8V7z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Hh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),nE||(nE=i.createElement("path",{d:"M28 10H4A2.0022 2.0022 0 012 8V4A2.0021 2.0021 0 014 2H28a2.0021 2.0021 0 012 2V8A2.0022 2.0022 0 0128 10zM4 4V8H28V4zM28 30H4a2.0022 2.0022 0 01-2-2V24a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v4A2.0022 2.0022 0 0128 30zM4 24v4H28V24zM28 20H4a2.0022 2.0022 0 01-2-2V14a2.0021 2.0021 0 012-2H28a2.0021 2.0021 0 012 2v4A2.0022 2.0022 0 0128 20zM4 14v4H28V14z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,kh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),rE||(rE=i.createElement("path",{d:"M28 28H17a2.0023 2.0023 0 01-2-2V20a2.0023 2.0023 0 012-2H28a2.0027 2.0027 0 012 2v6A2.0027 2.0027 0 0128 28zM17 20v6H28.002L28 20zM12 10L12 13.586 7.707 9.293 6.293 10.707 10.586 15 7 15 7 17 14 17 14 10 12 10z"})),lE||(lE=i.createElement("path",{d:"M13,22H4a2.0023,2.0023,0,0,1-2-2V7A2.002,2.002,0,0,1,4,5H26a2.0023,2.0023,0,0,1,2,2v9H26V7H4V20h9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Nh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),dE||(dE=i.createElement("rect",{width:"15",height:"10",x:"15",y:"18",rx:"2"})),oE||(oE=i.createElement("path",{d:"M12 10L12 13.586 7.707 9.293 6.293 10.707 10.586 15 7 15 7 17 14 17 14 10 12 10z"})),mE||(mE=i.createElement("path",{d:"M13,22H4a2.0023,2.0023,0,0,1-2-2V7A2.002,2.002,0,0,1,4,5H26a2.0023,2.0023,0,0,1,2,2v9H26V7H4V20h9Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Zh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),vE||(vE=i.createElement("path",{d:"M22.59,19.41,26.17,23H19.55l-4.37-7,4.37-7h6.62l-3.58,3.59L24,14l6-6L24,2,22.59,3.41,26.17,7H19.55a2,2,0,0,0-1.69.94L14,14.11,10.14,7.94A2,2,0,0,0,8.45,7H2V9H8.45l4.37,7L8.45,23H2v2H8.45a2,2,0,0,0,1.69-.94L14,17.89l3.86,6.17a2,2,0,0,0,1.69.94h6.62l-3.58,3.59L24,30l6-6-6-6Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Yh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),cE||(cE=i.createElement("path",{d:"M29.81,16l-7-9.56A1,1,0,0,0,22,6H3A1,1,0,0,0,2,7V24a1,1,0,0,0,1,1H5.14a4,4,0,0,0,7.72,0h6.28a4,4,0,0,0,7.72,0H29a1,1,0,0,0,1-1V16.56A1,1,0,0,0,29.81,16ZM20,8h1.49l5.13,7H20ZM4,8H18v7H4ZM9,26a2,2,0,1,1,2-2A2,2,0,0,1,9,26Zm14,0a2,2,0,1,1,2-2A2,2,0,0,1,23,26Zm5-3H26.86a4,4,0,0,0-7.72,0H12.86a4,4,0,0,0-7.72,0H4V17H28Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Ph);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),uE||(uE=i.createElement("path",{d:"M10 12H12V14H10zM6 12H8V14H6zM2 12H4V14H2zM26 30H24V27H20a5.0055 5.0055 0 01-5-5V20.7207l-2.3162-.772a1 1 0 01-.5412-1.4631L15 13.7229V11a9.01 9.01 0 019-9h5V4H24a7.0078 7.0078 0 00-7 7v3a.9991.9991 0 01-.1426.5144l-2.3586 3.9312 1.8174.6057A1 1 0 0117 20v2a3.0033 3.0033 0 003 3h5a1 1 0 011 1z"})),fE||(fE=i.createElement("path",{d:"M19 12H23V14H19z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,jh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),bE||(bE=i.createElement("path",{d:"M24 5L7 5 7 7.414 15.586 16 7 24.586 7 27 24 27 24 25 9.414 25 18.414 16 9.414 7 24 7 24 5z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Kh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),pE||(pE=i.createElement("path",{d:"M26 6H28V26H26zM18 11H20V26H18zM11 16H13V26H11zM4 20H6V26H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Gh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),gE||(gE=i.createElement("path",{d:"M21,9H8a2.0023,2.0023,0,0,0-2,2V21a2.0023,2.0023,0,0,0,2,2H21a2.0023,2.0023,0,0,0,2-2V11A2.0023,2.0023,0,0,0,21,9Zm0,4H18V11h3Zm-3,2h3v2H18Zm-2-4V21H13V14a1,1,0,0,0-1-1H8V11Zm-5,6H8V15h3ZM8,19h3v2H8Zm10,2V19h3v2Z"})),EE||(EE=i.createElement("path",{d:"M23.5317,27H4a2.0021,2.0021,0,0,1-2-2V7A2.0021,2.0021,0,0,1,4,5H28a2.0021,2.0021,0,0,1,2,2V19.6379a2.0044,2.0044,0,0,1-.4639,1.2808L25.0679,26.28A1.9944,1.9944,0,0,1,23.5317,27ZM4,7V25H23.5317L28,19.6379V7Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Qh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),wE||(wE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zm-6-2h4V14H14zM10 30H2V18h8zM4 28H8V20H4z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,Jh);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),hE||(hE=i.createElement("path",{d:"M30 30H22V4h8zM20 30H12V12h8zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,$h);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),xE||(xE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zm-6-2h4V14H14zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ex);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),zE||(zE=i.createElement("path",{d:"M30 30H22V4h8zm-6-2h4V6H24zM20 30H12V12h8zM10 30H2V18h8z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ix);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),LE||(LE=i.createElement("path",{d:"M27 28a1 1 0 01-.5-.13l-19-11a1 1 0 010-1.74l19-11a1 1 0 011 0A1 1 0 0128 5V27a1 1 0 01-1 1zM10 16l16 9.27V6.73zM2 4H4V28H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,tx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),ME||(ME=i.createElement("path",{d:"M27 28a.9975.9975 0 01-.501-.1348l-19-11a1 1 0 010-1.73l19-11A1 1 0 0128 5V27a1 1 0 01-1 1zM2 4H4V28H2z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,_x);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),RE||(RE=i.createElement("path",{d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7485l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Zm-6.9409-6L22,19.3006V12.7Z"})),SE||(SE=i.createElement("path",{d:"M9 10H11V22H9z",transform:"rotate(-180 10 16)"})),DE||(DE=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,sx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),yE||(yE=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM10,22H8V10h2Zm14-1a1,1,0,0,1-1.4858.874l-9-5a1,1,0,0,1,0-1.748l9-5A1,1,0,0,1,24,11Z"})),VE||(VE=i.createElement("path",{d:"M22 19.301L22 12.699 16.059 16 22 19.301z"})),AE||(AE=i.createElement("path",{fill:"none",d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7486l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Zm-6.9409-6L22,19.3005V12.7Z"})),TE||(TE=i.createElement("path",{fill:"none",d:"M8 10H10V22H8z",transform:"rotate(-180 9 16)"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,ax);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),WE||(WE=i.createElement("path",{d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7485l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Z"})),UE||(UE=i.createElement("path",{d:"M9 10H11V22H9z",transform:"rotate(-180 10 16)"})),IE||(IE=i.createElement("path",{d:"M16,30A14,14,0,1,1,30,16,14.0158,14.0158,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12.0137,12.0137,0,0,0,16,4Z"})),_)})).propTypes=da,i.forwardRef((function(e,t){var _=e.children,s=e.size,a=void 0===s?16:s,n=re(e,nx);return i.createElement(oe,ae({width:a,height:a,ref:t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor"},n),BE||(BE=i.createElement("path",{d:"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM10,22H8V10h2Zm14-1a1,1,0,0,1-1.4858.874l-9-5a1,1,0,0,1,0-1.748l9-5A1,1,0,0,1,24,11Z"})),OE||(OE=i.createElement("path",{fill:"none",d:"M23,22a1.0037,1.0037,0,0,1-.4858-.1257l-9-5a1,1,0,0,1,0-1.7486l9-5A1,1,0,0,1,24,11V21a1,1,0,0,1-1,1Z"})),FE||(FE=i.createElement("path",{fill:"none",d:"M8 10H10V22H8z",transform:"rotate(-180 9 16)"})),_)})).propTypes=da;var dx=["autoComplete","className","closeButtonLabelText","defaultValue","disabled","id","labelText","light","onChange","onClear","onKeyDown","onExpand","placeholder","renderIcon","role","size","type","value"],ox=i.forwardRef((function(e,t){var _,s,a,n=e.autoComplete,r=void 0===n?"off":n,l=e.className,d=e.closeButtonLabelText,o=void 0===d?"Clear search input":d,m=e.defaultValue,v=e.disabled,c=e.id,u=e.labelText,f=e.light,b=e.onChange,p=void 0===b?function(){}:b,g=e.onClear,E=void 0===g?function(){}:g,w=e.onKeyDown,h=e.onExpand,x=e.placeholder,z=void 0===x?"":x,L=e.renderIcon,M=e.role,R=void 0===M?"searchbox":M,S=e.size,D=void 0===S?"md":S,y=e.type,V=void 0===y?"text":y,W=e.value,U=B(e,dx),I=Z(),O=(0,i.useRef)(null),F=(a=[t,O],(0,i.useCallback)((function(e){a.forEach((function(i){"function"===typeof i?i(e):null!==i&&void 0!==i&&(i.current=e)}))}),a)),X=Ir("search-input"),C=c||X,H="".concat(C,"-search"),N=q((0,i.useState)(W||m||!1),2),Y=N[0],P=N[1],j=q((0,i.useState)(W),2),K=j[0],G=j[1],Q=k()((A(_={},"".concat(I,"--search"),!0),A(_,"".concat(I,"--search--sm"),"sm"===D),A(_,"".concat(I,"--search--md"),"md"===D),A(_,"".concat(I,"--search--lg"),"lg"===D),A(_,"".concat(I,"--search--light"),f),A(_,"".concat(I,"--search--disabled"),v),A(_,l,l),_)),J=k()((A(s={},"".concat(I,"--search-close"),!0),A(s,"".concat(I,"--search-close--hidden"),!Y),s));function $(e){if(W){var i=Object.assign({},e.target,{target:{value:""}});p(i)}else O.current.value="",p(e);E(),P(!1),function(e){var i=e.current||e;i&&i.focus&&document.activeElement!==i&&i.focus()}(O)}return W!==K&&(P(!!W),G(W)),i.createElement("div",{role:"search","aria-labelledby":H,className:Q},i.createElement("div",{role:h?"button":null,className:"".concat(I,"--search-magnifier"),onClick:function(){h&&h()}},i.createElement(mx,{icon:L})),i.createElement("label",{id:H,htmlFor:C,className:"".concat(I,"--label")},u),i.createElement("input",T({},U,{autoComplete:r,className:"".concat(I,"--search-input"),defaultValue:m,disabled:v,role:R,ref:F,id:C,onChange:Ll([p,function(e){P(""!==e.target.value)}]),onKeyDown:Ll([w,function(e){Cr(e,Hr)&&(e.stopPropagation(),$(e))}]),placeholder:z,type:V,value:W})),i.createElement("button",{"aria-label":o,className:J,disabled:v,onClick:$,type:"button"},rx||(rx=i.createElement(Vr,null))))}));function mx(e){var t=e.icon,_=Z();return t?i.cloneElement(t,{className:"".concat(_,"--search-magnifier-icon")}):i.createElement(lx,{className:"".concat(_,"--search-magnifier-icon")})}ox.propTypes={autoComplete:P().string,className:P().string,closeButtonLabelText:P().string,defaultValue:P().oneOfType([P().string,P().number]),disabled:P().bool,id:P().string,labelText:P().node.isRequired,light:Or(P().bool),onChange:P().func,onClear:P().func,onExpand:P().func,onKeyDown:P().func,placeholder:P().string,renderIcon:P().oneOfType([P().func,P().object]),role:P().string,size:P().oneOf(["sm","md","lg"]),type:P().string,value:P().oneOfType([P().string,P().number])},mx.propTypes={icon:P().oneOfType([P().func,P().object])};var vx,cx=ox,ux=(0,i.createContext)(w);P().node,P().objectOf(P().bool);var fx=["className","type","id","placeHolderText","placeholder","labelText","closeButtonLabelText","small","size","light","disabled","onChange","onKeyDown","renderIcon","onClear"],bx=function(e){W(_,e);var t=F(_);function _(){var e;D(this,_);for(var i=arguments.length,s=new Array(i),a=0;a3?s-3:0),n=3;n add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"addi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"addiw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"I","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let result : xlenbits = add_bits(sign_extend(64, imm), rX_bits(rs1)) in { wX_bits(rd, sign_extend(64, subrange_bits(result, 31, 0))); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"addw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes32dsi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10101","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(32) = bitvector_concat(0x000000, aes_sbox_inv(si)) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(so, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"aes32dsmi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(8) = aes_sbox_inv(si) in { let mixed : bits(32) = aes_mixcolumn_byte_inv(so) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(mixed, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"aes32esi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(32) = bitvector_concat(0x000000, aes_sbox_fwd(si)) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(so, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"aes32esmi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b10011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let si : bits(8) = subrange_bits(shift_bits_right(rX_bits(rs2), shamt), 7, 0) in { let so : bits(8) = aes_sbox_fwd(si) in { let mixed : bits(32) = aes_mixcolumn_byte_fwd(so) in { let result : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 31, 0), rotate_bits_left(mixed, shamt)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"aes64ds","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11101","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:408.27-408.28\\"); let sr : bits(64) = aes_rv64_shiftrows_inv(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { wX_bits(rd, aes_apply_inv_sbox_to_each_byte(wd)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64dsm","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:399.27-399.28\\"); let sr : bits(64) = aes_rv64_shiftrows_inv(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { let sb : bits(64) = aes_apply_inv_sbox_to_each_byte(wd) in { wX_bits(rd, bitvector_concat(aes_mixcolumn_inv(subrange_bits(sb, 63, 32)), aes_mixcolumn_inv(subrange_bits(sb, 31, 0)))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64es","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:391.27-391.28\\"); let sr : bits(64) = aes_rv64_shiftrows_fwd(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { wX_bits(rd, aes_apply_fwd_sbox_to_each_byte(wd)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64esm","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:382.27-382.28\\"); let sr : bits(64) = aes_rv64_shiftrows_fwd(rX_bits(rs2), rX_bits(rs1)) in { let wd : bits(64) = subrange_bits(sr, 63, 0) in { let sb : bits(64) = aes_apply_fwd_sbox_to_each_byte(wd) in { wX_bits(rd, bitvector_concat(aes_mixcolumn_fwd(subrange_bits(sb, 63, 32)), aes_mixcolumn_fwd(subrange_bits(sb, 31, 0)))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64im","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11000","size":5},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:374.27-374.28\\"); let w0 : bits(32) = aes_mixcolumn_inv(subrange_bits(rX_bits(rs1), 31, 0)) in { let w1 : bits(32) = aes_mixcolumn_inv(subrange_bits(rX_bits(rs1), 63, 32)) in { wX_bits(rd, bitvector_concat(w1, w0)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"aes64ks1i","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rnum","type":"bits(4)"}],"syntax":"rd,rs1,rnum","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b11000","size":5},{"field":"0b1","size":1},{"field":"rnum","size":4},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zkne","Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:356.27-356.28\\"); let prev : bits(32) = subrange_bits(rX_bits(rs1), 63, 32) in { let subwords : bits(32) = aes_subword_fwd(prev) in { let result : bits(32) = if eq_bits(rnum, 0xA) then subwords else xor_vec(rotater(subwords, 8), aes_decode_rcon(rnum)) in { wX_bits(rd, bitvector_concat(result, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"aes64ks2","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b11111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zkne","Zknd"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:366.27-366.28\\"); let w0 : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 63, 32), subrange_bits(rX_bits(rs2), 31, 0)) in { let w1 : bits(32) = xor_vec(subrange_bits(rX_bits(rs1), 63, 32), xor_vec(subrange_bits(rX_bits(rs2), 31, 0), subrange_bits(rX_bits(rs2), 63, 32))) in { wX_bits(rd, bitvector_concat(w1, w0)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"amoadd.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoadd.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoand.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomax.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomaxu.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amomin.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amominu.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoor.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoswap.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"amoxor.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs2,(rs1)","format":"TBD","fields":[{"field":"encdec_amoop(op)","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), ReadWrite((Data, Data)), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { match translateAddr(vaddr, ReadWrite((Data, Data))) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 292, \\"Unexpected AMO width\\") } in { let is_unsigned : bool = match op { AMOMINU => true, AMOMAXU => true, _ => false } in { let rs2_val : xlenbits = match width { BYTE => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 7, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 7, 0)), HALF => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 15, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 15, 0)), WORD => if is_unsigned then zero_extend(64, subrange_bits(rX_bits(rs2), 31, 0)) else sign_extend(64, subrange_bits(rX_bits(rs2), 31, 0)), DOUBLE => rX_bits(rs2) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let mval : MemoryOpResult(xlenbits) = match (width, 64) { (BYTE, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 1, aq, and_bool(aq, rl), true)), (HALF, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 2, aq, and_bool(aq, rl), true)), (WORD, _) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 4, aq, and_bool(aq, rl), true)), (DOUBLE, 64) => extend_value(is_unsigned, mem_read(ReadWrite((Data, Data)), addr, 8, aq, and_bool(aq, rl), true)), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 313, \\"Unexpected AMO width\\") } in { match mval { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(loaded) => { let result : xlenbits = match op { AMOSWAP => rs2_val, AMOADD => add_bits(rs2_val, loaded), AMOXOR => xor_vec(rs2_val, loaded), AMOAND => and_vec(rs2_val, loaded), AMOOR => or_vec(rs2_val, loaded), AMOMIN => to_bits(64, min_int(signed(rs2_val), signed(loaded))), AMOMAX => to_bits(64, max_int(signed(rs2_val), signed(loaded))), AMOMINU => to_bits(64, min_int(unsigned(rs2_val), unsigned(loaded))), AMOMAXU => to_bits(64, max_int(unsigned(rs2_val), unsigned(loaded))) } in { let rval : xlenbits = match width { BYTE => sign_extend(64, subrange_bits(loaded, 7, 0)), HALF => sign_extend(64, subrange_bits(loaded, 15, 0)), WORD => sign_extend(64, subrange_bits(loaded, 31, 0)), DOUBLE => loaded } in { let wval : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(result, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(result, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(result, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, result, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 345, \\"Unexpected AMO width\\") } in { match wval { MemValue(true) => { wX_bits(rd, rval); RETIRE_SUCCESS }, MemValue(false) => { internal_error(\\"model/riscv_insts_aext.sail\\", 349, \\"AMO got false from mem_write_value\\") }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"and","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"andi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"andn","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"auipc","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(20)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm","size":20},{"field":"rd","size":5},{"field":"encdec_uop(op)","size":7}],"extensions":[],"function":"{ let off : xlenbits = sign_extend(64, bitvector_concat(imm, 0x000)) in { let ret : xlenbits = match op { RISCV_LUI => off, RISCV_AUIPC => add_bits(get_arch_pc(), off) } in { wX_bits(rd, ret); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"bclr","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bclri","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"beq","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bext","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bexti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"bge","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bgeu","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"binv","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"binvi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"blt","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bltu","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bne","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(13)"}],"syntax":"rs1,rs2,imm","format":"TBD","fields":[{"field":"imm7_6","size":1},{"field":"imm7_5_0","size":6},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_bop(op)","size":3},{"field":"imm5_4_1","size":4},{"field":"imm5_0","size":1},{"field":"0b1100011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let taken : bool = match op { RISCV_BEQ => eq_bits(rs1_val, rs2_val), RISCV_BNE => neq_bits(rs1_val, rs2_val), RISCV_BLT => (operator <_s)(rs1_val, rs2_val), RISCV_BGE => (operator >=_s)(rs1_val, rs2_val), RISCV_BLTU => (operator <_u)(rs1_val, rs2_val), RISCV_BGEU => (operator >=_u)(rs1_val, rs2_val) } in { let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { if taken then { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { set_next_pc(target); RETIRE_SUCCESS } } } } else RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"brev8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011010000111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = reverse_bits_in_byte(subrange_bits(rs1_val, add_atom(i, 7), i)); wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"bset","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), subrange_bits(rs2_val, 5, 0)) in { let result : xlenbits = match op { RISCV_BCLR => and_vec(rs1_val, not_vec(mask)), RISCV_BEXT => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINV => xor_vec(rs1_val, mask), RISCV_BSET => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"bseti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b001010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbs"],"function":"{ let rs1_val = rX_bits(rs1) in { let mask : xlenbits = if eq_int(64, 32) then shift_bits_left(zero_extend(64, 0b1), subrange_bits(shamt, 4, 0)) else shift_bits_left(zero_extend(64, 0b1), shamt) in { let result : xlenbits = match op { RISCV_BCLRI => and_vec(rs1_val, not_vec(mask)), RISCV_BEXTI => zero_extend(64, bool_to_bits(neq_bits(and_vec(rs1_val, mask), zeros_implicit(64)))), RISCV_BINVI => xor_vec(rs1_val, mask), RISCV_BSETI => or_vec(rs1_val, mask) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"c.add","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"rsd","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RTYPE((rs2, rsd, rsd, RISCV_ADD)))","description":"TBD"},{"mnemonic":"c.add.hint.","name":"TBD","operands":[{"name":"rs2","type":"regidx"}],"syntax":"rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.addi","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"nzi","type":"bits(6)"}],"syntax":"rsd,nzi","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzi5","size":1},{"field":"rsd","size":5},{"field":"nzi40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, nzi) in { execute(ITYPE((imm, rsd, rsd, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.addi.hint.","name":"TBD","operands":[{"name":"rsd","type":"regidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"rsd","size":5},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.addi16sp","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"nzi9","size":1},{"field":"0b00010","size":5},{"field":"nzi4","size":1},{"field":"nzi6","size":1},{"field":"nzi87","size":2},{"field":"nzi5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, bitvector_concat(imm, 0x0)) in { execute(ITYPE((imm, sp, sp, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.addi4spn","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"nzimm","type":"bits(8)"}],"syntax":"rdc,nzimm,0b00","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nz54","size":2},{"field":"nz96","size":4},{"field":"nz2","size":1},{"field":"nz3","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = bitvector_concat(0b00, bitvector_concat(nzimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { execute(ITYPE((imm, sp, rd, RISCV_ADDI))) } } }","description":"TBD"},{"mnemonic":"c.addiw","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rsd,imm","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"imm5","size":1},{"field":"rsd","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"execute(ADDIW((sign_extend(12, imm), rsd, rsd)))","description":"TBD"},{"mnemonic":"c.addw","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b01","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPEW((rs2, rsd, rsd, RISCV_ADDW))) } } }","description":"TBD"},{"mnemonic":"c.and","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b11","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_AND))) } } }","description":"TBD"},{"mnemonic":"c.andi","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rsd,imm","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"i5","size":1},{"field":"0b10","size":2},{"field":"rsd","size":3},{"field":"i40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(ITYPE((sign_extend(12, imm), rsd, rsd, RISCV_ANDI))) } }","description":"TBD"},{"mnemonic":"c.beqz","name":"TBD","operands":[{"name":"rs","type":"cregidx"},{"name":"imm","type":"bits(8)"}],"syntax":"rs,imm","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"i8","size":1},{"field":"i43","size":2},{"field":"rs","size":3},{"field":"i76","size":2},{"field":"i21","size":2},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(BTYPE((sign_extend(13, bitvector_concat(imm, 0b0)), zreg, creg2reg_idx(rs), RISCV_BEQ)))","description":"TBD"},{"mnemonic":"c.bnez","name":"TBD","operands":[{"name":"rs","type":"cregidx"},{"name":"imm","type":"bits(8)"}],"syntax":"rs,imm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"i8","size":1},{"field":"i43","size":2},{"field":"rs","size":3},{"field":"i76","size":2},{"field":"i21","size":2},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(BTYPE((sign_extend(13, bitvector_concat(imm, 0b0)), zreg, creg2reg_idx(rs), RISCV_BNE)))","description":"TBD"},{"mnemonic":"c.ebreak","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(EBREAK())","description":"TBD"},{"mnemonic":"c.fld","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b000","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD_FP((imm, rs, rd, DOUBLE))) } } } }","description":"TBD"},{"mnemonic":"c.fldsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui43","size":2},{"field":"ui86","size":3},{"field":"0b10","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(LOAD_FP((imm, sp, rd, DOUBLE))) } }","description":"TBD"},{"mnemonic":"c.flw","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b00","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD_FP((imm, rs, rd, WORD))) } } } }","description":"TBD"},{"mnemonic":"c.flwsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui42","size":3},{"field":"ui76","size":2},{"field":"0b10","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(imm, 0b00)) in { execute(LOAD_FP((imm, sp, rd, WORD))) } }","description":"TBD"},{"mnemonic":"c.fsd","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b000","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE_FP((imm, rs2, rs1, DOUBLE))) } } } }","description":"TBD"},{"mnemonic":"c.fsdsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"ui53","size":3},{"field":"ui86","size":3},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":["C","D"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(STORE_FP((imm, rs2, sp, DOUBLE))) } }","description":"TBD"},{"mnemonic":"c.fsw","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b00","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE_FP((imm, rs2, rs1, WORD))) } } } }","description":"TBD"},{"mnemonic":"c.fswsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui52","size":4},{"field":"ui76","size":2},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":["C","F"],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(STORE_FP((imm, rs2, sp, WORD))) } }","description":"TBD"},{"mnemonic":"c.illegal","name":"TBD","operands":[{"name":"s","type":"half"}],"syntax":"s","format":"TBD","fields":[{"field":"s","size":16}],"extensions":[],"function":"{ handle_illegal(); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"c.j","name":"TBD","operands":[{"name":"imm","type":"bits(11)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b101","size":3},{"field":"i11","size":1},{"field":"i4","size":1},{"field":"i98","size":2},{"field":"i10","size":1},{"field":"i6","size":1},{"field":"i7","size":1},{"field":"i31","size":3},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(RISCV_JAL((sign_extend(21, bitvector_concat(imm, 0b0)), zreg)))","description":"TBD"},{"mnemonic":"c.jal","name":"TBD","operands":[{"name":"imm","type":"bits(11)"}],"syntax":"imm,0b0","format":"TBD","fields":[{"field":"0b001","size":3},{"field":"i11","size":1},{"field":"i4","size":1},{"field":"i98","size":2},{"field":"i10","size":1},{"field":"i6","size":1},{"field":"i7","size":1},{"field":"i31","size":3},{"field":"i5","size":1},{"field":"0b01","size":2}],"extensions":[],"function":"execute(RISCV_JAL((sign_extend(21, bitvector_concat(imm, 0b0)), ra)))","description":"TBD"},{"mnemonic":"c.jalr","name":"TBD","operands":[{"name":"rs1","type":"regidx"}],"syntax":"rs1","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"rs1","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RISCV_JALR((zero_extend(12, 0b0), rs1, ra)))","description":"TBD"},{"mnemonic":"c.jr","name":"TBD","operands":[{"name":"rs1","type":"regidx"}],"syntax":"rs1","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"rs1","size":5},{"field":"0b00000","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RISCV_JALR((zero_extend(12, 0b0), rs1, zreg)))","description":"TBD"},{"mnemonic":"c.ld","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b000","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD((imm, rs, rd, false, DOUBLE, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.ldsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui43","size":2},{"field":"ui86","size":3},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(LOAD((imm, sp, rd, false, DOUBLE, false, false))) } }","description":"TBD"},{"mnemonic":"c.li","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"imm5","size":1},{"field":"rd","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let imm : bits(12) = sign_extend(12, imm) in { execute(ITYPE((imm, zreg, rd, RISCV_ADDI))) } }","description":"TBD"},{"mnemonic":"c.li.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"imm5","size":1},{"field":"0b00000","size":5},{"field":"imm40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.lui","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(6)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"imm17","size":1},{"field":"rd","size":5},{"field":"imm1612","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let res : bits(20) = sign_extend(20, imm) in { execute(UTYPE((res, rd, RISCV_LUI))) } }","description":"TBD"},{"mnemonic":"c.lui.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b011","size":3},{"field":"imm17","size":1},{"field":"0b00000","size":5},{"field":"imm1612","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.lw","name":"TBD","operands":[{"name":"rdc","type":"cregidx"},{"name":"rsc","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rdc,rsc,uimm,0b00","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rd","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rd = creg2reg_idx(rdc) in { let rs = creg2reg_idx(rsc) in { execute(LOAD((imm, rs, rd, false, WORD, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.lwsp","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rd,uimm","format":"TBD","fields":[{"field":"0b010","size":3},{"field":"ui5","size":1},{"field":"rd","size":5},{"field":"ui42","size":3},{"field":"ui76","size":2},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(LOAD((imm, sp, rd, false, WORD, false, false))) } }","description":"TBD"},{"mnemonic":"c.mv","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"rd","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(RTYPE((rs2, zreg, rd, RISCV_ADD)))","description":"TBD"},{"mnemonic":"c.mv.hint.","name":"TBD","operands":[{"name":"rs2","type":"regidx"}],"syntax":"rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b00000","size":5},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.nop","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00000","size":5},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.nop.hint.","name":"TBD","operands":[{"name":"imm","type":"bits(6)"}],"syntax":"imm","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"im5","size":1},{"field":"0b00000","size":5},{"field":"im40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.or","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b10","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_OR))) } } }","description":"TBD"},{"mnemonic":"c.sd","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b000","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui76","size":2},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE((imm, rs2, rs1, DOUBLE, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.sdsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b111","size":3},{"field":"ui53","size":3},{"field":"ui86","size":3},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b000)) in { execute(STORE((imm, rs2, sp, DOUBLE, false, false))) } }","description":"TBD"},{"mnemonic":"c.slli","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzui5","size":1},{"field":"rsd","size":5},{"field":"nzui40","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SLLI)))","description":"TBD"},{"mnemonic":"c.slli.hint.","name":"TBD","operands":[{"name":"rsd","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"nzui5","size":1},{"field":"rsd","size":5},{"field":"nzui40","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.srai","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"nzui5","size":1},{"field":"0b01","size":2},{"field":"rsd","size":3},{"field":"nzui40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SRAI))) } }","description":"TBD"},{"mnemonic":"c.srai.hint.","name":"TBD","operands":[{"name":"rsd","type":"cregidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"rsd","size":3},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.srli","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rsd,shamt","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"nzui5","size":1},{"field":"0b00","size":2},{"field":"rsd","size":3},{"field":"nzui40","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { execute(SHIFTIOP((shamt, rsd, rsd, RISCV_SRLI))) } }","description":"TBD"},{"mnemonic":"c.srli.hint.","name":"TBD","operands":[{"name":"rsd","type":"cregidx"}],"syntax":"rsd","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"rsd","size":3},{"field":"0b00000","size":5},{"field":"0b01","size":2}],"extensions":[],"function":"RETIRE_SUCCESS","description":"TBD"},{"mnemonic":"c.sub","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b00","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_SUB))) } } }","description":"TBD"},{"mnemonic":"c.subw","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b1","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b00","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPEW((rs2, rsd, rsd, RISCV_SUBW))) } } }","description":"TBD"},{"mnemonic":"c.sw","name":"TBD","operands":[{"name":"rsc1","type":"cregidx"},{"name":"rsc2","type":"cregidx"},{"name":"uimm","type":"bits(5)"}],"syntax":"rsc1,rsc2,uimm,0b00","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"ui53","size":3},{"field":"rs1","size":3},{"field":"ui2","size":1},{"field":"ui6","size":1},{"field":"rs2","size":3},{"field":"0b00","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { let rs1 = creg2reg_idx(rsc1) in { let rs2 = creg2reg_idx(rsc2) in { execute(STORE((imm, rs2, rs1, WORD, false, false))) } } } }","description":"TBD"},{"mnemonic":"c.swsp","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"uimm","type":"bits(6)"}],"syntax":"rs2,uimm","format":"TBD","fields":[{"field":"0b110","size":3},{"field":"ui52","size":4},{"field":"ui76","size":2},{"field":"rs2","size":5},{"field":"0b10","size":2}],"extensions":[],"function":"{ let imm : bits(12) = zero_extend(12, bitvector_concat(uimm, 0b00)) in { execute(STORE((imm, rs2, sp, WORD, false, false))) } }","description":"TBD"},{"mnemonic":"c.xor","name":"TBD","operands":[{"name":"rsd","type":"cregidx"},{"name":"rs2","type":"cregidx"}],"syntax":"rsd,rs2","format":"TBD","fields":[{"field":"0b100","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"rsd","size":3},{"field":"0b01","size":2},{"field":"rs2","size":3},{"field":"0b01","size":2}],"extensions":[],"function":"{ let rsd = creg2reg_idx(rsd) in { let rs2 = creg2reg_idx(rs2) in { execute(RTYPE((rs2, rsd, rsd, RISCV_XOR))) } } }","description":"TBD"},{"mnemonic":"clmul","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc","Zbkc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftl(rs1_val, i)) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clmulh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc","Zbkc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftr(rs1_val, sub_atom(xlen_val, i))) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clmulr","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbc"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs2_val, i), bitone) then result = xor_vec(result, shiftr(rs1_val, sub_atom(sub_atom(xlen_val, i), 1))) else (); wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000000","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from sub_atom(64, 1) to 0 by 1 order dec) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"clzw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000000","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 31 to 0 by 1 order dec) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"cpop","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000010","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { foreach (i from 0 to sub_atom(xlen_val, 1) by 1 order inc) { if eq_bit(bitvector_access(rs1_val, i), bitone) then result = add_atom(result, 1) else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"cpopw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000010","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { foreach (i from 0 to 31 by 1 order inc) { if eq_bit(bitvector_access(rs1_val, i), bitone) then result = add_atom(result, 1) else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"csrrc","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrci","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrs","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrsi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"csrrwi","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"csr","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,csr,rs1","format":"TBD","fields":[{"field":"csr","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_imm)","size":1},{"field":"encdec_csrop(op)","size":2},{"field":"rd","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let rs1_val : xlenbits = if is_imm then zero_extend(64, rs1) else rX_bits(rs1) in { let isWrite : bool = match op { CSRRW => true, _ => if is_imm then neq_int(unsigned(rs1_val), 0) else neq_int(unsigned(rs1), 0) } in { if not(check_CSR(csr, cur_privilege, isWrite)) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_CSR(csr, cur_privilege, isWrite)) then { ext_check_CSR_fail(); RETIRE_FAIL } else { let csr_val = readCSR(csr) in { if isWrite then { let new_val : xlenbits = match op { CSRRW => rs1_val, CSRRS => or_vec(csr_val, rs1_val), CSRRC => and_vec(csr_val, not_vec(rs1_val)) } in { writeCSR(csr, new_val) } } else (); wX_bits(rd, csr_val); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"ctz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000001","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 0 to sub_atom(64, 1) by 1 order inc) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"ctzw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011000000001","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : nat = 0 in { var done : bool = false in { foreach (i from 0 to 31 by 1 order inc) { if not(done) then if eq_bit(bitvector_access(rs1_val, i), bitzero) then result = add_atom(result, 1) else done = true else (); wX_bits(rd, to_bits(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"czero.eqz","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000111","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zicond"],"function":"{ let value = rX_bits(rs1) in { let condition = rX_bits(rs2) in { let result : xlenbits = if neq_bits(condition, zeros_implicit(64)) then zeros_implicit(64) else value in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"czero.nez","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000111","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zicond"],"function":"{ let value = rX_bits(rs1) in { let condition = rX_bits(rs2) in { let result : xlenbits = if neq_bits(condition, zeros_implicit(64)) then zeros_implicit(64) else value in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"div","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, xlen_max_signed)) then xlen_min_signed else q in { wX_bits(rd, to_bits(64, q\')); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, xlen_max_signed)) then xlen_min_signed else q in { wX_bits(rd, to_bits(64, q\')); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divuw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, sub_atom(pow2(31), 1))) then sub_atom(0, int_power(2, 31)) else q in { wX_bits(rd, sign_extend(64, to_bits(32, q\'))); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"divw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b10","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let q : int = if eq_int(rs2_int, 0) then -1 else quot_round_zero(rs1_int, rs2_int) in { let q\' : int = if and_bool(s, gt_int(q, sub_atom(pow2(31), 1))) then sub_atom(0, int_power(2, 31)) else q in { wX_bits(rd, sign_extend(64, to_bits(32, q\'))); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"ebreak","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000001","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ handle_mem_exception(PC, E_Breakpoint()); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"ecall","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000000","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let t : sync_exception = struct { trap = match cur_privilege { User => E_U_EnvCall(), Supervisor => E_S_EnvCall(), Machine => E_M_EnvCall() }; excinfo = None() : option(xlenbits); ext = None() } in { set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC)); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"fadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fclass.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fclass.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fclass.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fcvt.d.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.d.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.h.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.l.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.lu.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.lu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.s.wu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.w.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvt.wu.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fcvtmod.w.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1100001","size":7},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let (fflags, rd_val) = fcvtmod_helper(rs1_val_D) in { accrue_fflags(fflags); wX_bits(rd, sign_extend(64, rd_val)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fdiv.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fdiv.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fdiv.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fence","name":"TBD","operands":[{"name":"pred","type":"bits(4)"},{"name":"succ","type":"bits(4)"}],"syntax":"pred,succ","format":"I","fields":[{"field":"0b0000","size":4},{"field":"pred","size":4},{"field":"succ","size":4},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ let fiom = is_fiom_active() in { let pred = effective_fence_set(pred, fiom) in { let succ = effective_fence_set(succ, fiom) in { match (pred, succ) { (_ : bits(2) @ 0b11, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_rw_rw()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_r_rw()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_r_r()), (_ : bits(2) @ 0b11, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_rw_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_w_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_w_rw()), (_ : bits(2) @ 0b11, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_rw_r()), (_ : bits(2) @ 0b10, _ : bits(2) @ 0b01) => __barrier(Barrier_RISCV_r_w()), (_ : bits(2) @ 0b01, _ : bits(2) @ 0b10) => __barrier(Barrier_RISCV_w_r()), (_ : bits(4), _ : bits(2) @ 0b00) => (), (_ : bits(2) @ 0b00, _ : bits(4)) => (), _ => { print(\\"FIXME: unsupported fence\\"); () } }; RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fence.i","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000000000000","size":12},{"field":"0b00000","size":5},{"field":"0b001","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"fence.tso","name":"TBD","operands":[{"name":"pred","type":"bits(4)"},{"name":"succ","type":"bits(4)"}],"syntax":"pred,succ","format":"I","fields":[{"field":"0b1000","size":4},{"field":"pred","size":4},{"field":"succ","size":4},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b0001111","size":7}],"extensions":[],"function":"{ match (pred, succ) { (_ : bits(2) @ 0b11, _ : bits(2) @ 0b11) => __barrier(Barrier_RISCV_tso()), (_ : bits(2) @ 0b00, _ : bits(2) @ 0b00) => (), _ => { print(\\"FIXME: unsupported fence\\"); () } }; RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"feq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"feq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"feq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flb","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fld","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fle.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fle.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fle.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let rs2_val_D = rF_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le_quiet(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le_quiet(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fleq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le_quiet(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fli.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let bits : bits(64) = match constantidx { 0b00000 => { 0xbff0000000000000 }, 0b00001 => { 0x0010000000000000 }, 0b00010 => { 0x3Ef0000000000000 }, 0b00011 => { 0x3f00000000000000 }, 0b00100 => { 0x3f70000000000000 }, 0b00101 => { 0x3f80000000000000 }, 0b00110 => { 0x3fb0000000000000 }, 0b00111 => { 0x3fc0000000000000 }, 0b01000 => { 0x3fd0000000000000 }, 0b01001 => { 0x3fd4000000000000 }, 0b01010 => { 0x3fd8000000000000 }, 0b01011 => { 0x3fdc000000000000 }, 0b01100 => { 0x3fe0000000000000 }, 0b01101 => { 0x3fe4000000000000 }, 0b01110 => { 0x3fe8000000000000 }, 0b01111 => { 0x3fec000000000000 }, 0b10000 => { 0x3ff0000000000000 }, 0b10001 => { 0x3ff4000000000000 }, 0b10010 => { 0x3ff8000000000000 }, 0b10011 => { 0x3ffc000000000000 }, 0b10100 => { 0x4000000000000000 }, 0b10101 => { 0x4004000000000000 }, 0b10110 => { 0x4008000000000000 }, 0b10111 => { 0x4010000000000000 }, 0b11000 => { 0x4020000000000000 }, 0b11001 => { 0x4030000000000000 }, 0b11010 => { 0x4060000000000000 }, 0b11011 => { 0x4070000000000000 }, 0b11100 => { 0x40e0000000000000 }, 0b11101 => { 0x40f0000000000000 }, 0b11110 => { 0x7ff0000000000000 }, _ : bitvector(5) => { canonical_NaN_D() } } in { wF_D(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"fli.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let bits : bits(16) = match constantidx { 0b00000 => { 0xbc00 }, 0b00001 => { 0x0400 }, 0b00010 => { 0x0100 }, 0b00011 => { 0x0200 }, 0b00100 => { 0x1c00 }, 0b00101 => { 0x2000 }, 0b00110 => { 0x2c00 }, 0b00111 => { 0x3000 }, 0b01000 => { 0x3400 }, 0b01001 => { 0x3500 }, 0b01010 => { 0x3600 }, 0b01011 => { 0x3700 }, 0b01100 => { 0x3800 }, 0b01101 => { 0x3900 }, 0b01110 => { 0x3a00 }, 0b01111 => { 0x3b00 }, 0b10000 => { 0x3c00 }, 0b10001 => { 0x3d00 }, 0b10010 => { 0x3e00 }, 0b10011 => { 0x3f00 }, 0b10100 => { 0x4000 }, 0b10101 => { 0x4100 }, 0b10110 => { 0x4200 }, 0b10111 => { 0x4400 }, 0b11000 => { 0x4800 }, 0b11001 => { 0x4c00 }, 0b11010 => { 0x5800 }, 0b11011 => { 0x5c00 }, 0b11100 => { 0x7800 }, 0b11101 => { 0x7c00 }, 0b11110 => { 0x7c00 }, _ : bitvector(5) => { canonical_NaN_H() } } in { wF_H(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"fli.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"constantidx","type":"bits(5)"}],"syntax":"rd,constantidx","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":3},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let bits : bits(32) = match constantidx { 0b00000 => { 0xbf800000 }, 0b00001 => { 0x00800000 }, 0b00010 => { 0x37800000 }, 0b00011 => { 0x38000000 }, 0b00100 => { 0x3b800000 }, 0b00101 => { 0x3c000000 }, 0b00110 => { 0x3d800000 }, 0b00111 => { 0x3e000000 }, 0b01000 => { 0x3e800000 }, 0b01001 => { 0x3ea00000 }, 0b01010 => { 0x3ec00000 }, 0b01011 => { 0x3ee00000 }, 0b01100 => { 0x3f000000 }, 0b01101 => { 0x3f200000 }, 0b01110 => { 0x3f400000 }, 0b01111 => { 0x3f600000 }, 0b10000 => { 0x3f800000 }, 0b10001 => { 0x3fa00000 }, 0b10010 => { 0x3fc00000 }, 0b10011 => { 0x3fe00000 }, 0b10100 => { 0x40000000 }, 0b10101 => { 0x40200000 }, 0b10110 => { 0x40400000 }, 0b10111 => { 0x40800000 }, 0b11000 => { 0x41000000 }, 0b11001 => { 0x41800000 }, 0b11010 => { 0x43000000 }, 0b11011 => { 0x43800000 }, 0b11100 => { 0x47000000 }, 0b11101 => { 0x47800000 }, 0b11110 => { 0x7f800000 }, _ : bitvector(5) => { canonical_NaN_S() } } in { wF_S(rd, bits); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"flt.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flt.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flt.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { let rs2_val_D = rF_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Lt_quiet(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Lt_quiet(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fltq.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Lt_quiet(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"flw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b0000111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let (aq, rl, res) = (false, false, false) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fload16(rd, vaddr, mem_read(Read(Data), addr, 2, aq, rl, res)), WORD => process_fload32(rd, vaddr, mem_read(Read(Data), addr, 4, aq, rl, res)), DOUBLE if gteq_int(64, 64) => process_fload64(rd, vaddr, mem_read(Read(Data), addr, 8, aq, rl, res)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 397, width, \\"floating point load\\") } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmax.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmax.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmax.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmaxm.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { let rs2_val_D = rF_bits(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_D(rs2_val_D, rs1_val_D, is_quiet) in { let rd_val_D = if or_bool(f_is_NaN_D(rs1_val_D), f_is_NaN_D(rs2_val_D)) then canonical_NaN_D() else if and_bool(f_is_neg_zero_D(rs1_val_D), f_is_pos_zero_D(rs2_val_D)) then rs2_val_D else if and_bool(f_is_neg_zero_D(rs2_val_D), f_is_pos_zero_D(rs1_val_D)) then rs1_val_D else if rs2_lt_rs1 then rs1_val_D else rs2_val_D in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmaxm.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_H(rs2_val_H, rs1_val_H, is_quiet) in { let rd_val_H = if or_bool(f_is_NaN_H(rs1_val_H), f_is_NaN_H(rs2_val_H)) then canonical_NaN_H() else if and_bool(f_is_neg_zero_H(rs1_val_H), f_is_pos_zero_H(rs2_val_H)) then rs2_val_H else if and_bool(f_is_neg_zero_H(rs2_val_H), f_is_pos_zero_H(rs1_val_H)) then rs1_val_H else if rs2_lt_rs1 then rs1_val_H else rs2_val_H in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmaxm.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let is_quiet = true in { let (rs2_lt_rs1, fflags) = fle_S(rs2_val_S, rs1_val_S, is_quiet) in { let rd_val_S = if or_bool(f_is_NaN_S(rs1_val_S), f_is_NaN_S(rs2_val_S)) then canonical_NaN_S() else if and_bool(f_is_neg_zero_S(rs1_val_S), f_is_pos_zero_S(rs2_val_S)) then rs2_val_S else if and_bool(f_is_neg_zero_S(rs2_val_S), f_is_pos_zero_S(rs1_val_S)) then rs1_val_S else if rs2_lt_rs1 then rs1_val_S else rs2_val_S in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmin.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmin.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fmin.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fminm.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { let rs2_val_D = rF_bits(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_D(rs1_val_D, rs2_val_D, is_quiet) in { let rd_val_D = if or_bool(f_is_NaN_D(rs1_val_D), f_is_NaN_D(rs2_val_D)) then canonical_NaN_D() else if and_bool(f_is_neg_zero_D(rs1_val_D), f_is_pos_zero_D(rs2_val_D)) then rs1_val_D else if and_bool(f_is_neg_zero_D(rs2_val_D), f_is_pos_zero_D(rs1_val_D)) then rs2_val_D else if rs1_lt_rs2 then rs1_val_D else rs2_val_D in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fminm.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { let rs2_val_H = rF_H(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_H(rs1_val_H, rs2_val_H, is_quiet) in { let rd_val_H = if or_bool(f_is_NaN_H(rs1_val_H), f_is_NaN_H(rs2_val_H)) then canonical_NaN_H() else if and_bool(f_is_neg_zero_H(rs1_val_H), f_is_pos_zero_H(rs2_val_H)) then rs1_val_H else if and_bool(f_is_neg_zero_H(rs2_val_H), f_is_pos_zero_H(rs1_val_H)) then rs2_val_H else if rs1_lt_rs2 then rs1_val_H else rs2_val_H in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fminm.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { let rs2_val_S = rF_S(rs2) in { let is_quiet = true in { let (rs1_lt_rs2, fflags) = fle_S(rs1_val_S, rs2_val_S, is_quiet) in { let rd_val_S = if or_bool(f_is_NaN_S(rs1_val_S), f_is_NaN_S(rs2_val_S)) then canonical_NaN_S() else if and_bool(f_is_neg_zero_S(rs1_val_S), f_is_pos_zero_S(rs2_val_S)) then rs1_val_S else if and_bool(f_is_neg_zero_S(rs2_val_S), f_is_pos_zero_S(rs1_val_S)) then rs2_val_S else if rs1_lt_rs2 then rs1_val_S else rs2_val_S in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fmsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fmul.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmul.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmul.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fmv.d.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.h.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.w.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111001","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D"],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:1004.27-1004.28\\"); let rs1_val_X = rX_bits(rs1) in { let rd_val_D = subrange_bits(rs1_val_X, 63, 0) in { wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111010","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_H = subrange_bits(rs1_val_X, 15, 0) in { wF_bits(rd, nan_box_H(rd_val_H)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmv.x.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1111000","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["F"],"function":"{ let rs1_val_X = rX_bits(rs1) in { let rd_val_S = subrange_bits(rs1_val_X, 31, 0) in { wF_bits(rd, nan_box_S(rd_val_S)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmvh.x.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b1110001","size":7},{"field":"0b00001","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = subrange_bits(rF_D(rs1), 63, 32) in { let rd_val_X : xlenbits = sign_extend(64, rs1_val_D) in { wX_bits(rd, rd_val_X); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"fmvp.d.x","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1011001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_X = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val_X = subrange_bits(rX_bits(rs2), 31, 0) in { let rd_val_D = bitvector_concat(rs2_val_X, rs1_val_X) in { wF_D(rd, rd_val_D); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fnmadd.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmadd.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmadd.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b01","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { let rs3_val_64b = rF_or_X_D(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FMADD_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, rs3_val_64b), FMSUB_D => riscv_f64MulAdd(rm_3b, rs1_val_64b, rs2_val_64b, negate_D(rs3_val_64b)), FNMSUB_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, rs3_val_64b), FNMADD_D => riscv_f64MulAdd(rm_3b, negate_D(rs1_val_64b), rs2_val_64b, negate_D(rs3_val_64b)) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b10","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { let rs3_val_16b = rF_or_X_H(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FMADD_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, rs3_val_16b), FMSUB_H => riscv_f16MulAdd(rm_3b, rs1_val_16b, rs2_val_16b, negate_H(rs3_val_16b)), FNMSUB_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, rs3_val_16b), FNMADD_H => riscv_f16MulAdd(rm_3b, negate_H(rs1_val_16b), rs2_val_16b, negate_H(rs3_val_16b)) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fnmsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rs3","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rs3,rm","format":"TBD","fields":[{"field":"rs3","size":5},{"field":"0b00","size":2},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1001111","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { let rs3_val_32b = rF_or_X_S(rs3) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FMADD_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, rs3_val_32b), FMSUB_S => riscv_f32MulAdd(rm_3b, rs1_val_32b, rs2_val_32b, negate_S(rs3_val_32b)), FNMSUB_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, rs3_val_32b), FNMADD_S => riscv_f32MulAdd(rm_3b, negate_S(rs1_val_32b), rs2_val_32b, negate_S(rs3_val_32b)) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } } }","description":"TBD"},{"mnemonic":"fround.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100001","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_bits(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_f64roundToInt(rm_3b, rs1_val_D, false) in { accrue_fflags(fflags); wF_bits(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fround.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100010","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_f16roundToInt(rm_3b, rs1_val_H, false) in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fround.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_f32roundToInt(rm_3b, rs1_val_S, false) in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100001","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["D","Zfa"],"function":"{ let rs1_val_D = rF_D(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_f64roundToInt(rm_3b, rs1_val_D, true) in { accrue_fflags(fflags); wF_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100010","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfh","Zfa"],"function":"{ let rs1_val_H = rF_H(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_f16roundToInt(rm_3b, rs1_val_H, true) in { accrue_fflags(fflags); wF_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"froundnx.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":["Zfa"],"function":"{ let rs1_val_S = rF_S(rs1) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_f32roundToInt(rm_3b, rs1_val_S, true) in { accrue_fflags(fflags); wF_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsb","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsd","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsgnj.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnj.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnj.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjn.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_D = rF_or_X_D(rs1) in { let rs2_val_D = rF_or_X_D(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f64Le(rs1_val_D, rs2_val_D) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010010","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_H = rF_or_X_H(rs1) in { let rs2_val_H = rF_or_X_H(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f16Le(rs1_val_H, rs2_val_H) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsgnjx.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b1010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_S = rF_or_X_S(rs1) in { let rs2_val_S = rF_or_X_S(rs2) in { let (fflags, rd_val) : (bits_fflags, bool) = riscv_f32Le(rs1_val_S, rs2_val_S) in { accrue_fflags(fflags); wX_bits(rd, zero_extend(64, bool_to_bits(rd_val))); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"fsh","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101001","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_dext.sail:650.27-650.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_D) = riscv_ui64ToF64(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_D); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101010","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_zfh.sail:823.27-823.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_H) = riscv_ui64ToF16(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_H); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsqrt.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rm","format":"TBD","fields":[{"field":"0b1101000","size":7},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ assert(gteq_int(64, 64), \\"model/riscv_insts_fext.sail:789.27-789.28\\"); let rs1_val_LU = subrange_bits(rX_bits(rs1), 63, 0) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_S) = riscv_ui64ToF32(rm_3b, rs1_val_LU) in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_S); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"fsub.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001101","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_64b = rF_or_X_D(rs1) in { let rs2_val_64b = rF_or_X_D(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_64b) : (bits(5), bits(64)) = match op { FADD_D => riscv_f64Add(rm_3b, rs1_val_64b, rs2_val_64b), FSUB_D => riscv_f64Sub(rm_3b, rs1_val_64b, rs2_val_64b), FMUL_D => riscv_f64Mul(rm_3b, rs1_val_64b, rs2_val_64b), FDIV_D => riscv_f64Div(rm_3b, rs1_val_64b, rs2_val_64b) } in { accrue_fflags(fflags); wF_or_X_D(rd, rd_val_64b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsub.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001110","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_16b = rF_or_X_H(rs1) in { let rs2_val_16b = rF_or_X_H(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_16b) : (bits(5), bits(16)) = match op { FADD_H => riscv_f16Add(rm_3b, rs1_val_16b, rs2_val_16b), FSUB_H => riscv_f16Sub(rm_3b, rs1_val_16b, rs2_val_16b), FMUL_H => riscv_f16Mul(rm_3b, rs1_val_16b, rs2_val_16b), FDIV_H => riscv_f16Div(rm_3b, rs1_val_16b, rs2_val_16b) } in { accrue_fflags(fflags); wF_or_X_H(rd, rd_val_16b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsub.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"rm","type":"rounding_mode"}],"syntax":"rd,rs1,rs2,rm","format":"TBD","fields":[{"field":"0b0001100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_rounding_mode(rm)","size":3},{"field":"rd","size":5},{"field":"0b1010011","size":7}],"extensions":[],"function":"{ let rs1_val_32b = rF_or_X_S(rs1) in { let rs2_val_32b = rF_or_X_S(rs2) in { match select_instr_or_fcsr_rm(rm) { None(()) => { handle_illegal(); RETIRE_FAIL }, Some(rm\') => { let rm_3b = encdec_rounding_mode_forwards(rm\') in { let (fflags, rd_val_32b) : (bits(5), bits(32)) = match op { FADD_S => riscv_f32Add(rm_3b, rs1_val_32b, rs2_val_32b), FSUB_S => riscv_f32Sub(rm_3b, rs1_val_32b, rs2_val_32b), FMUL_S => riscv_f32Mul(rm_3b, rs1_val_32b, rs2_val_32b), FDIV_S => riscv_f32Div(rm_3b, rs1_val_32b, rs2_val_32b) } in { accrue_fflags(fflags); wF_or_X_S(rd, rd_val_32b); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"fsw","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b011","size":3},{"field":"imm5","size":1},{"field":"0b0100111","size":7}],"extensions":["D"],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { let (aq, rl, con) = (false, false, false) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => MemValue(), HALF => mem_write_ea(addr, 2, aq, rl, false), WORD => mem_write_ea(addr, 4, aq, rl, false), DOUBLE => mem_write_ea(addr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rF_bits(rs2) in { match width { BYTE => { handle_illegal(); RETIRE_FAIL }, HALF => process_fstore(vaddr, mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, con)), WORD => process_fstore(vaddr, mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, con)), DOUBLE if gteq_int(64, 64) => process_fstore(vaddr, mem_write_value(addr, 8, rs2_val, aq, rl, con)), _ => report_invalid_width(\\"model/riscv_insts_fext.sail\\", 470, width, \\"floating point store\\") } } } } } } } } } } }","description":"TBD"},{"mnemonic":"illegal","name":"TBD","operands":[{"name":"s","type":"word"}],"syntax":"s","format":"TBD","fields":[{"field":"s","size":32}],"extensions":[],"function":"{ handle_illegal(); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"jal","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(21)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm_19","size":1},{"field":"imm_18_13","size":6},{"field":"imm_12_9","size":4},{"field":"imm_8","size":1},{"field":"imm_7_0","size":8},{"field":"rd","size":5},{"field":"0b1101111","size":7}],"extensions":[],"function":"{ let t : xlenbits = add_bits(PC, sign_extend(64, imm)) in { match ext_control_check_pc(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(target) => { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { wX_bits(rd, get_next_pc()); set_next_pc(target); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"jalr","name":"jump and link register","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"I","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b1100111","size":7}],"extensions":[],"function":"{ let t : xlenbits = add_bits(rX_bits(rs1), sign_extend(64, imm)) in { match ext_control_check_addr(t) { Ext_ControlAddr_Error(e) => { ext_handle_control_check_error(e); RETIRE_FAIL }, Ext_ControlAddr_OK(addr) => { let target = bitvector_update(addr, 0, bitzero) in { if and_bool(bit_to_bool(bitvector_access(target, 1)), not(extension(\\"C\\"))) then { handle_mem_exception(target, E_Fetch_Addr_Align()); RETIRE_FAIL } else { wX_bits(rd, get_next_pc()); set_next_pc(target); RETIRE_SUCCESS } } } } } }","description":"\\nThe target address is obtained by adding the sign-extended 12-bit\\nI-immediate to the register rs1, then setting the\\nleast-significant bit of the result to zero. The address of the\\ninstruction following the jump (pc+4) is written to register rd.\\nRegister x0 can be used as the destination if the result is not\\nrequired.\\n "},{"mnemonic":"lb","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lb.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lbu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ld.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"ldu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lh.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lhu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lr.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lr.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00010","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => match (width, 64) { (BYTE, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 1, aq, and_bool(aq, rl), true), false), (HALF, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 2, aq, and_bool(aq, rl), true), false), (WORD, _) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 4, aq, and_bool(aq, rl), true), false), (DOUBLE, 64) => process_loadres(rd, vaddr, mem_read(Read(Data), addr, 8, aq, and_bool(aq, rl), true), false), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 156, \\"Unexpected AMO width\\") } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"lui","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(20)"}],"syntax":"rd,imm","format":"TBD","fields":[{"field":"imm","size":20},{"field":"rd","size":5},{"field":"encdec_uop(op)","size":7}],"extensions":[],"function":"{ let off : xlenbits = sign_extend(64, bitvector_concat(imm, 0x000)) in { let ret : xlenbits = match op { RISCV_LUI => off, RISCV_AUIPC => add_bits(get_arch_pc(), off) } in { wX_bits(rd, ret); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"lw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lw.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"lwu.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rd,imm(rs1)","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"bool_bits(is_unsigned)","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0000011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Read(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_Load_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Read(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => match width { BYTE => process_load(rd, vaddr, mem_read(Read(Data), paddr, 1, aq, rl, false), is_unsigned), HALF => process_load(rd, vaddr, mem_read(Read(Data), paddr, 2, aq, rl, false), is_unsigned), WORD => process_load(rd, vaddr, mem_read(Read(Data), paddr, 4, aq, rl, false), is_unsigned), DOUBLE if gteq_int(64, 64) => process_load(rd, vaddr, mem_read(Read(Data), paddr, 8, aq, rl, false), is_unsigned), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 419, width, \\"load\\") } } } } }","description":"TBD"},{"mnemonic":"max","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"maxu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"min","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"minu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"mret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0011000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ if neq_anything(cur_privilege, Machine) then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_xret_priv(Machine)) then { ext_fail_xret_priv(); RETIRE_FAIL } else { set_next_pc(exception_handler(cur_privilege, CTL_MRET(), PC)); RETIRE_SUCCESS } }","description":"TBD"},{"mnemonic":"mul","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulhsu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulhu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_mul_op(high,signed1,signed2)","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if signed1 then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if signed2 then signed(rs2_val) else unsigned(rs2_val) in { let result_wide = to_bits(mult_atom(2, 64), mult_atom(rs1_int, rs2_int)) in { let result = if high then subrange_bits(result_wide, sub_atom(mult_atom(2, 64), 1), 64) else subrange_bits(result_wide, sub_atom(64, 1), 0) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"mulw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if or_bool(haveMulDiv(), haveZmmul()) then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = signed(rs1_val) in { let rs2_int : int = signed(rs2_val) in { let result32 = subrange_bits(to_bits(64, mult_atom(rs1_int, rs2_int)), 31, 0) in { let result : xlenbits = sign_extend(64, result32) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"or","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"orc.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b001010000111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = if eq_bits(subrange_bits(rs1_val, add_atom(i, 7), i), zeros_implicit(add_atom(sub_atom(add_atom(__id(i), 7), __id(i)), 1))) then 0x00 else 0xFF; wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"ori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"orn","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"pack","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_PACK => bitvector_concat(subrange_bits(rs2_val, sub_atom(mult_atom(8, 4), 1), 0), subrange_bits(rs1_val, sub_atom(mult_atom(8, 4), 1), 0)), RISCV_PACKH => zero_extend(64, bitvector_concat(subrange_bits(rs2_val, 7, 0), subrange_bits(rs1_val, 7, 0))) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"packh","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_PACK => bitvector_concat(subrange_bits(rs2_val, sub_atom(mult_atom(8, 4), 1), 0), subrange_bits(rs1_val, sub_atom(mult_atom(8, 4), 1), 0)), RISCV_PACKH => zero_extend(64, bitvector_concat(subrange_bits(rs2_val, 7, 0), subrange_bits(rs1_val, 7, 0))) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"packw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zbkb.sail:109.27-109.28\\"); let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : bits(32) = bitvector_concat(subrange_bits(rs2_val, 15, 0), subrange_bits(rs1_val, 15, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rem","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, to_bits(64, r)); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, to_bits(64, r)); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remuw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, sign_extend(64, to_bits(32, r))); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"remw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0000001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b11","size":2},{"field":"bool_not_bits(s)","size":1},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ if haveMulDiv() then { let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let rs1_int : int = if s then signed(rs1_val) else unsigned(rs1_val) in { let rs2_int : int = if s then signed(rs2_val) else unsigned(rs2_val) in { let r : int = if eq_int(rs2_int, 0) then rs1_int else rem_round_zero(rs1_int, rs2_int) in { wX_bits(rd, sign_extend(64, to_bits(32, r))); RETIRE_SUCCESS } } } } } } else { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"rev8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b011010111000","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { result[add_atom(i, 7) .. i] = subrange_bits(rs1_val, sub_atom(sub_atom(64, i), 1), sub_atom(sub_atom(64, i), 8)); wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"rol","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rolw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let shamt = subrange_bits(rX_bits(rs2), 4, 0) in { let result : bits(32) = match op { RISCV_ROLW => rotate_bits_left(rs1_val, shamt), RISCV_RORW => rotate_bits_right(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"ror","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"rori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b011000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else rotate_bits_right(rs1_val, shamt) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"roriw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : xlenbits = sign_extend(64, rotate_bits_right(rs1_val, shamt)) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"rorw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let shamt = subrange_bits(rX_bits(rs2), 4, 0) in { let result : bits(32) = match op { RISCV_ROLW => rotate_bits_left(rs1_val, shamt), RISCV_RORW => rotate_bits_right(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sb","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sb.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sc.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.b.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.d.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.h.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.aq","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.aq.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sc.w.rl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b00011","size":5},{"field":"bool_bits(aq)","size":1},{"field":"bool_bits(rl)","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"rd","size":5},{"field":"0b0101111","size":7}],"extensions":[],"function":"{ if eq_bool(speculate_conditional(), false) then { wX_bits(rd, zero_extend(64, 0b1)); RETIRE_SUCCESS } else { if haveAtomics() then { match ext_data_get_addr(rs1, zeros_implicit(64), Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => { let aligned : bool = match width { BYTE => true, HALF => eq_bits(subrange_bits(vaddr, 0, 0), 0b0), WORD => eq_bits(subrange_bits(vaddr, 1, 0), 0b00), DOUBLE => eq_bits(subrange_bits(vaddr, 2, 0), 0b000) } in { if not(aligned) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else { if eq_bool(match_reservation(vaddr), false) then { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS } else { match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((addr, _)) => { let eares : MemoryOpResult(unit) = match (width, 64) { (BYTE, _) => mem_write_ea(addr, 1, and_bool(aq, rl), rl, true), (HALF, _) => mem_write_ea(addr, 2, and_bool(aq, rl), rl, true), (WORD, _) => mem_write_ea(addr, 4, and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_ea(addr, 8, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 220, \\"STORECON expected word or double\\") } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { var rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match (width, 64) { (BYTE, _) => mem_write_value(addr, 1, subrange_bits(rs2_val, 7, 0), and_bool(aq, rl), rl, true), (HALF, _) => mem_write_value(addr, 2, subrange_bits(rs2_val, 15, 0), and_bool(aq, rl), rl, true), (WORD, _) => mem_write_value(addr, 4, subrange_bits(rs2_val, 31, 0), and_bool(aq, rl), rl, true), (DOUBLE, 64) => mem_write_value(addr, 8, rs2_val, and_bool(aq, rl), rl, true), _ => internal_error(\\"model/riscv_insts_aext.sail\\", 231, \\"STORECON expected word or double\\") } in { match res { MemValue(true) => { wX_bits(rd, zero_extend(64, 0b0)); cancel_reservation(); RETIRE_SUCCESS }, MemValue(false) => { wX_bits(rd, zero_extend(64, 0b1)); cancel_reservation(); RETIRE_SUCCESS }, MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } } } } } else { handle_illegal(); RETIRE_FAIL } } }","description":"TBD"},{"mnemonic":"sd","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sd.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sext.b","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sext.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sfence.vma","name":"TBD","operands":[{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rs1,rs2","format":"R","fields":[{"field":"0b0001001","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let addr : option(xlenbits) = if eq_bits(rs1, 0b00000) then None() else Some(rX_bits(rs1)) in { let asid : option(xlenbits) = if eq_bits(rs2, 0b00000) then None() else Some(rX_bits(rs2)) in { match cur_privilege { User => { handle_illegal(); RETIRE_FAIL }, Supervisor => match (architecture(get_mstatus_SXL(mstatus)), _get_Mstatus_TVM(mstatus)) { (Some(_), 0b1) => { handle_illegal(); RETIRE_FAIL }, (Some(_), 0b0) => { flush_TLB(asid, addr); RETIRE_SUCCESS }, (_, _) => internal_error(\\"model/riscv_insts_base.sail\\", 866, \\"unimplemented sfence architecture\\") }, Machine => { flush_TLB(asid, addr); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sh1add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh1add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh2add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh2add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh3add","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_SH1ADD => 0b01, RISCV_SH2ADD => 0b10, RISCV_SH3ADD => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(rs1_val, shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sh3add.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let shamt : bits(2) = match op { RISCV_ADDUW => 0b00, RISCV_SH1ADDUW => 0b01, RISCV_SH2ADDUW => 0b10, RISCV_SH3ADDUW => 0b11 } in { let result : xlenbits = add_bits(shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt), rs2_val) in { wX_bits(rd, result); RETIRE_SUCCESS } } } } }","description":"TBD"},{"mnemonic":"sha256sig0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00010","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 7), xor_vec(rotater(inb, 18), shiftr(inb, 3))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sig1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00011","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 17), xor_vec(rotater(inb, 19), shiftr(inb, 10))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sum0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 2), xor_vec(rotater(inb, 13), rotater(inb, 22))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha256sum1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00001","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ let inb : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(rotater(inb, 6), xor_vec(rotater(inb, 11), rotater(inb, 25))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00110","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:452.27-452.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 1), xor_vec(rotater(input, 8), shiftr(input, 7))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig0h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01110","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftr(rX_bits(rs1), 1), xor_vec(shiftr(rX_bits(rs1), 7), xor_vec(shiftr(rX_bits(rs1), 8), xor_vec(shiftl(rX_bits(rs2), 31), shiftl(rX_bits(rs2), 24))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig0l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01010","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftr(rX_bits(rs1), 1), xor_vec(shiftr(rX_bits(rs1), 7), xor_vec(shiftr(rX_bits(rs1), 8), xor_vec(shiftl(rX_bits(rs2), 31), xor_vec(shiftl(rX_bits(rs2), 25), shiftl(rX_bits(rs2), 24)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00111","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:460.27-460.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 19), xor_vec(rotater(input, 61), shiftr(input, 6))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sig1h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01111","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 3), xor_vec(shiftr(rX_bits(rs1), 6), xor_vec(shiftr(rX_bits(rs1), 19), xor_vec(shiftr(rX_bits(rs2), 29), shiftl(rX_bits(rs2), 13))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sig1l","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01011","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 3), xor_vec(shiftr(rX_bits(rs1), 6), xor_vec(shiftr(rX_bits(rs1), 19), xor_vec(shiftr(rX_bits(rs2), 29), xor_vec(shiftl(rX_bits(rs2), 26), shiftl(rX_bits(rs2), 13)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sum0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00100","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:468.27-468.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 28), xor_vec(rotater(input, 34), rotater(input, 39))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sum0r","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01000","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 25), xor_vec(shiftl(rX_bits(rs1), 30), xor_vec(shiftr(rX_bits(rs1), 28), xor_vec(shiftr(rX_bits(rs2), 7), xor_vec(shiftr(rX_bits(rs2), 2), shiftl(rX_bits(rs2), 4)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sha512sum1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b00101","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zknh"],"function":"{ assert(eq_int(64, 64), \\"model/riscv_insts_zkn.sail:476.27-476.28\\"); let input : bits(64) = rX_bits(rs1) in { let result : bits(64) = xor_vec(rotater(input, 14), xor_vec(rotater(input, 18), rotater(input, 41))) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sha512sum1r","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b01","size":2},{"field":"0b01001","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zknh"],"function":"{ wX_bits(rd, sign_extend(64, xor_vec(shiftl(rX_bits(rs1), 23), xor_vec(shiftr(rX_bits(rs1), 14), xor_vec(shiftr(rX_bits(rs1), 18), xor_vec(shiftr(rX_bits(rs2), 9), xor_vec(shiftl(rX_bits(rs2), 18), shiftl(rX_bits(rs2), 14)))))))); RETIRE_SUCCESS }","description":"TBD"},{"mnemonic":"sll","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"slli.uw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b000010","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":["Zba"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = shift_bits_left(zero_extend(64, subrange_bits(rs1_val, 31, 0)), shamt) in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"slliw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sllw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slt","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"slti","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sltiu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sltu","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sm3p0","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zksh"],"function":"{ let r1 : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(r1, xor_vec(rotatel(r1, 9), rotatel(r1, 17))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sm3p1","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b00","size":2},{"field":"0b01000","size":5},{"field":"0b01001","size":5},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zksh"],"function":"{ let r1 : bits(32) = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = xor_vec(r1, xor_vec(rotatel(r1, 15), rotatel(r1, 23))) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sm4ed","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b11000","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zksed"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let sb_in : bits(8) = subrange_bits(shift_bits_right(subrange_bits(rX_bits(rs2), 31, 0), shamt), 7, 0) in { let x : bits(32) = bitvector_concat(0x000000, sm4_sbox(sb_in)) in { let y : bits(32) = xor_vec(x, xor_vec(shiftl(x, 8), xor_vec(shiftl(x, 2), xor_vec(shiftl(x, 18), xor_vec(shiftl(and_vec(x, 0x0000003F), 26), shiftl(and_vec(x, 0x000000C0), 10)))))) in { let z : bits(32) = rotate_bits_left(y, shamt) in { let result : bits(32) = xor_vec(z, subrange_bits(rX_bits(rs1), 31, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"sm4ks","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"bs","type":"bits(2)"}],"syntax":"rd,rs1,rs2,bs","format":"TBD","fields":[{"field":"bs","size":2},{"field":"0b11010","size":5},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zksed"],"function":"{ let shamt : bits(5) = bitvector_concat(bs, 0b000) in { let sb_in : bits(8) = subrange_bits(shift_bits_right(subrange_bits(rX_bits(rs2), 31, 0), shamt), 7, 0) in { let x : bits(32) = bitvector_concat(0x000000, sm4_sbox(sb_in)) in { let y : bits(32) = xor_vec(x, xor_vec(shiftl(and_vec(x, 0x00000007), 29), xor_vec(shiftl(and_vec(x, 0x000000FE), 7), xor_vec(shiftl(and_vec(x, 0x00000001), 23), shiftl(and_vec(x, 0x000000F8), 13))))) in { let z : bits(32) = rotate_bits_left(y, shamt) in { let result : bits(32) = xor_vec(z, subrange_bits(rX_bits(rs1), 31, 0)) in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"sra","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"srai","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sraiw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"sraw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0001000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ let sret_illegal : bool = match cur_privilege { User => true, Supervisor => or_bool(not(haveSupMode()), eq_bits(_get_Mstatus_TSR(mstatus), 0b1)), Machine => not(haveSupMode()) } in { if sret_illegal then { handle_illegal(); RETIRE_FAIL } else if not(ext_check_xret_priv(Supervisor)) then { ext_fail_xret_priv(); RETIRE_FAIL } else { set_next_pc(exception_handler(cur_privilege, CTL_SRET(), PC)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"srli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(6)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"shamt","size":6},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SLLI => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_left(rs1_val, shamt), RISCV_SRLI => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(shamt, 4, 0)) else shift_bits_right(rs1_val, shamt), RISCV_SRAI => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(shamt, 4, 0)) else shift_right_arith64(rs1_val, shamt) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srliw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"shamt","type":"bits(5)"}],"syntax":"rd,rs1,shamt","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"shamt","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0011011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let result : bits(32) = match op { RISCV_SLLIW => shift_bits_left(rs1_val, shamt), RISCV_SRLIW => shift_bits_right(rs1_val, shamt), RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"srlw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sub","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"subw","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":[],"function":"{ let rs1_val = subrange_bits(rX_bits(rs1), 31, 0) in { let rs2_val = subrange_bits(rX_bits(rs2), 31, 0) in { let result : bits(32) = match op { RISCV_ADDW => add_bits(rs1_val, rs2_val), RISCV_SUBW => sub_vec(rs1_val, rs2_val), RISCV_SLLW => shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRLW => shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)), RISCV_SRAW => shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) } in { wX_bits(rd, sign_extend(64, result)); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"sw","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.aq","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.aq.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"sw.rl","name":"TBD","operands":[{"name":"rs2","type":"regidx"},{"name":"imm","type":"bits(12)"},{"name":"rs1","type":"regidx"}],"syntax":"rs2,imm(rs1)","format":"TBD","fields":[{"field":"imm7","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b0","size":1},{"field":"size_bits(size)","size":2},{"field":"imm5","size":1},{"field":"0b0100011","size":7}],"extensions":[],"function":"{ let offset : xlenbits = sign_extend(64, imm) in { match ext_data_get_addr(rs1, offset, Write(Data), width) { Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); RETIRE_FAIL }, Ext_DataAddr_OK(vaddr) => if check_misaligned(vaddr, width) then { handle_mem_exception(vaddr, E_SAMO_Addr_Align()); RETIRE_FAIL } else match translateAddr(vaddr, Write(Data)) { TR_Failure((e, _)) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, TR_Address((paddr, _)) => { let eares : MemoryOpResult(unit) = match width { BYTE => mem_write_ea(paddr, 1, aq, rl, false), HALF => mem_write_ea(paddr, 2, aq, rl, false), WORD => mem_write_ea(paddr, 4, aq, rl, false), DOUBLE => mem_write_ea(paddr, 8, aq, rl, false) } in { match eares { MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL }, MemValue(_) => { let rs2_val = rX_bits(rs2) in { let res : MemoryOpResult(bool) = match width { BYTE => mem_write_value(paddr, 1, subrange_bits(rs2_val, 7, 0), aq, rl, false), HALF => mem_write_value(paddr, 2, subrange_bits(rs2_val, 15, 0), aq, rl, false), WORD => mem_write_value(paddr, 4, subrange_bits(rs2_val, 31, 0), aq, rl, false), DOUBLE if gteq_int(64, 64) => mem_write_value(paddr, 8, rs2_val, aq, rl, false), _ => report_invalid_width(\\"model/riscv_insts_base.sail\\", 482, width, \\"store\\") } in { match res { MemValue(true) => RETIRE_SUCCESS, MemValue(false) => internal_error(\\"model/riscv_insts_base.sail\\", 486, \\"store got false from mem_write_value\\"), MemException(e) => { handle_mem_exception(vaddr, e); RETIRE_FAIL } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"unzip","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b000010001111","size":12},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 32), \\"model/riscv_insts_zbkb.sail:148.27-148.28\\"); exit () }","description":"TBD"},{"mnemonic":"uret","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b0000000","size":7},{"field":"0b00010","size":5},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"{ if or_bool(not(haveUsrMode()), not(sys_enable_next())) then handle_illegal() else if not(ext_check_xret_priv(User)) then ext_fail_xret_priv() else set_next_pc(exception_handler(cur_privilege, CTL_URET(), PC)); RETIRE_FAIL }","description":"TBD"},{"mnemonic":"vaadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vaaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"encdec_vimsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VIMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VVMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VVMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VXMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VXMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vand.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vasubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vcompress.vm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if or_bool(neq_int(start_element, 0), or_bool(eq_bits(vs1, vd), or_bool(eq_bits(vs2, vd), illegal_vd_unmasked()))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var vd_idx : nat = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lteq_int(i, end_element) then { if plain_vector_access(vs1_val, i) then { let p as \'p = vd_idx in { assert(lt_int(__id(p), __id(n)), \\"model/riscv_insts_vext_arith.sail:1877.22-1877.23\\"); result[__id(p)] = plain_vector_access(vs2_val, i); vd_idx = add_atom(vd_idx, 1) } } else () } else () }; if lt_int(vd_idx, num_elem) then { let tail_ag : agtype = get_vtype_vta() in { let p as \'p = vd_idx in { foreach (i from __id(p) to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } } } } else (); write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdiv.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdiv.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdivu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vdivu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfclass.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.f.x.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.f.xu.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.rtz.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.rtz.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfcvt.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary0_vs1(vfunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary0 { FV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_ui32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_ui64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 32 => riscv_i32ToF32(rm_3b, plain_vector_access(vs2_val, i)), 64 => riscv_i64ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToUi32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f32ToI32(0b001, plain_vector_access(vs2_val, i)), 64 => riscv_f64ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfdiv.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfdiv.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfirst.m","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"rd,vs2vm","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10001","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_vd_unmasked(), not(assert_vstart(0))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vs2_val, vm_val); var index : int = -1 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if eq_int(index, -1) then { if and_bool(plain_vector_access(mask, i), plain_vector_access(vs2_val, i)) then index = i else () } else () }; wX_bits(rd, to_bits(64, index)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmax.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmax.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmerge.vfm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_fp_vd_masked(vd, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:1247.17-1247.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then rs1_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmin.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmin.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmul.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.f.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"rd,vs2","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"0b00000","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if or_bool(illegal_fp_vd_unmasked(SEW, rm_3b), gt_int(SEW, 64)) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gt_int(num_elem, 0), neq_int(SEW, 8)), \\"model/riscv_insts_vext_fp.sail:858.32-858.33\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vs2) in { match __id(m) { 16 => wF_H(rd, plain_vector_access(vs2_val, 0)), 32 => wF_S(rd, plain_vector_access(vs2_val, 0)), _ => wF_D(rd, plain_vector_access(vs2_val, 0)) }; vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.s.f","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gt_int(num_elem, 0), neq_int(SEW, 8)), \\"model/riscv_insts_vext_fp.sail:1332.32-1332.33\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, 0, vd_val, vm_val); if plain_vector_access(mask, 0) then result[0] = rs1_val else (); let tail_ag : agtype = get_vtype_vta() in { foreach (i from 1 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } }; write_vreg(num_elem, SEW, 0, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfmv.v.f","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:1295.17-1295.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = rs1_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.x.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.f.xu.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rod.f.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rtz.x.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.rtz.xu.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.x.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfncvt.xu.f.w","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfnunary0_vs1(vfnunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfnunary0 { FNV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(rm_3b, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_ui32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_ui64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_i32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_i64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_ROD_F_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f32ToF16(0b110, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToF32(0b110, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToUi8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToUi16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToUi32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FNV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 8 => riscv_f16ToI8(0b001, plain_vector_access(vs2_val, i)), 16 => riscv_f32ToI16(0b001, plain_vector_access(vs2_val, i)), 32 => riscv_f64ToI32(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:996.17-996.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VMACC => fp_muladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMACC => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMSAC => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VNMSAC => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), VF_VMADD => fp_muladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMADD => fp_nmulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VMSUB => fp_mulsub(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), VF_VNMSUB => fp_nmuladd(rm_3b, rs1_val, plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfnmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:145.17-145.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VMACC => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMACC => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMSAC => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VNMSAC => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vs2_val, i), plain_vector_access(vd_val, i)), FVV_VMADD => fp_muladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMADD => fp_nmulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VMSUB => fp_mulsub(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)), FVV_VNMSUB => fp_nmuladd(rm_3b, plain_vector_access(vs1_val, i), plain_vector_access(vd_val, i), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrdiv.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrec7.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfredmax.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredmin.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredosum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfredusum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfrsqrt7.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfrsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnj.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnj.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjn.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjn.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjx.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsgnjx.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfslide1down.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfslide1up.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsqrt.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010011","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfunary1_vs1(vfunary1)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:782.17-782.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfunary1 { FVV_VSQRT => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Sqrt(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Sqrt(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Sqrt(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VRSQRT7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Rsqrte7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VREC7 => { let (fflags, elem) : (bits_fflags, bits(\'m)) = match __id(m) { 16 => riscv_f16Recip7(rm_3b, plain_vector_access(vs2_val, i)), 32 => riscv_f32Recip7(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f64Recip7(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FVV_VCLASS => fp_class(plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:906.17-906.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRSUB => fp_sub(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VMIN => fp_min(plain_vector_access(vs2_val, i), rs1_val), VF_VMAX => fp_max(plain_vector_access(vs2_val, i), rs1_val), VF_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), rs1_val), VF_VRDIV => fp_div(rm_3b, rs1_val, plain_vector_access(vs2_val, i)), VF_VSGNJ => bitvector_concat([bitvector_access(rs1_val, sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(rs1_val, sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), VF_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, VF_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_fp.sail:940.57-940.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_normal(vd, vm, SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_fp.sail:70.17-70.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FVV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMIN => fp_min(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMAX => fp_max(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VMUL => fp_mul(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VDIV => fp_div(rm_3b, plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVV_VSGNJ => bitvector_concat([bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))], subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJN => bitvector_concat(xor_vec(0b1, [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)), FVV_VSGNJX => bitvector_concat(xor_vec([bitvector_access(plain_vector_access(vs2_val, i), sub_atom(__id(m), 1))], [bitvector_access(plain_vector_access(vs1_val, i), sub_atom(__id(m), 1))]), subrange_bits(plain_vector_access(vs2_val, i), sub_atom(__id(m), 2), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.wf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1193.36-1193.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)), FWF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwadd.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:345.36-345.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))), FWV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.x.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.f.xu.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.rtz.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.rtz.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.x.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwcvt.xu.f.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"encdec_vfwunary0_vs1(vfwunary0)","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 8), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:521.35-521.36\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match vfwunary0 { FWV_CVT_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_XU => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_ui32ToF16(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_ui32ToF32(rm_3b, zero_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_ui32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_X => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => riscv_i32ToF16(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), 16 => riscv_i32ToF32(rm_3b, sign_extend(32, plain_vector_access(vs2_val, i))), _ => riscv_i32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_F_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToF32(rm_3b, plain_vector_access(vs2_val, i)), _ => riscv_f32ToF64(rm_3b, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_XU_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToUi32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToUi64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } }, FWV_CVT_RTZ_X_F => { let (fflags, elem) : (bits_fflags, bits(\'o)) = match __id(m) { 8 => { handle_illegal(); return RETIRE_FAIL }, 16 => riscv_f16ToI32(0b001, plain_vector_access(vs2_val, i)), _ => riscv_f32ToI64(0b001, plain_vector_access(vs2_val, i)) } in { accrue_fflags(fflags); elem } } } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmul.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmacc.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmsac.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvfmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1131.36-1131.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VMACC => fp_muladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMACC => fp_nmulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VMSAC => fp_mulsub(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVF_VNMSAC => fp_nmuladd(rm_3b, fp_widen(rs1_val), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_fwvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs1","size":5},{"field":"vs2","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:282.36-282.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VMACC => fp_muladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMACC => fp_nmulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VMSAC => fp_mulsub(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)), FWVV_VNMSAC => fp_nmuladd(rm_3b, fp_widen(plain_vector_access(vs1_val, i)), fp_widen(plain_vector_access(vs2_val, i)), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwredosum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfwredusum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rfvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { if or_bool(eq_anything(funct6, FVV_VFWREDOSUM), eq_anything(funct6, FVV_VFWREDUSUM)) then process_rfvv_widen(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) else process_rfvv_single(funct6, vm, vs2, vs1, vd, num_elem_vs, SEW, LMUL_pow) } } } }","description":"TBD"},{"mnemonic":"vfwsub.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwvffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1067.36-1067.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVF_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)), FWVF_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:217.36-217.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWVV_VADD => fp_add(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VSUB => fp_sub(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))), FWVV_VMUL => fp_mul(rm_3b, fp_widen(plain_vector_access(vs2_val, i)), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.wf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fwffunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:1193.36-1193.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWF_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)), FWF_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(rs1_val)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vfwsub.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fwvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_fp_variable_width(vd, vm, SEW, rm_3b, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); assert(and_bool(gteq_int(SEW, 16), lteq_int(SEW_widen, 64)), \\"model/riscv_insts_vext_fp.sail:345.36-345.37\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { FWV_VADD => fp_add(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))), FWV_VSUB => fp_sub(rm_3b, plain_vector_access(vs2_val, i), fp_widen(plain_vector_access(vs1_val, i))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vid.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vdvm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"0b10001","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = to_bits(SEW, i) else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } }","description":"TBD"},{"mnemonic":"viota.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10000","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); var sum : int = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = to_bits(SEW, sum); if plain_vector_access(vs2_val, i) then sum = add_atom(sum, 1) else () } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vle16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vle8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlm.v","name":"TBD","operands":[{"name":"vd_or_vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd_or_vs3,(rs1)","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01011","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vd_or_vs3","size":5},{"field":"encdec_lsop(op)","size":7}],"extensions":["V"],"function":"{ let EEW = 8 in { let EMUL_pow = 0 in { let vl_val = unsigned(vl) in { let evl : int = if eq_int(emod_int(vl_val, 8), 0) then quot_round_zero(vl_val, 8) else add_atom(quot_round_zero(vl_val, 8), 1) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gteq_int(evl, 0), \\"model/riscv_insts_vext_mem.sail:929.17-929.18\\"); process_vm(vd_or_vs3, rs1, num_elem, evl, op) } } } } } }","description":"TBD"},{"mnemonic":"vloxei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg2ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg3ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg4ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg5ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg6ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg7ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vloxseg8ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b11","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 3) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlre16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlre8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlse16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlse8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg2re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg3re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg4re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg5re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg6re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg7re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e16ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e32ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e64ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlseg(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8e8ff.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b10000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsegff(nf_int, vm, vd, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlseg8re8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:738.26-738.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlre(nf_int, vd, load_width_bytes, rs1, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg2e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg3e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg4e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg5e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg6e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg7e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vlsseg8e8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_load(vd, vm, nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlsseg(nf_int, vm, vd, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg2ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg3ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg4ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg5ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg6ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg7ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei16.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei32.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei64.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vluxseg8ei8.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vd","size":5},{"field":"0b0000111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_load(vd, vm, nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vlxseg(nf_int, vm, vd, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmacc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"}],"syntax":"vd,vs2,simm","format":"TBD","fields":[{"field":"encdec_vimcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VIMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), sub_atom(pow2(SEW), 1)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"encdec_vimfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VIM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_vvmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), sub_atom(pow2(SEW), 1)), VVMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VVM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,vs2,rs1","format":"TBD","fields":[{"field":"encdec_vxmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), sub_atom(pow2(SEW), 1)), VXMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VXM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmand.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmandnot.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmax.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmax.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmaxu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmaxu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vim","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,simm,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then imm_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then plain_vector_access(vs1_val, i) else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmerge.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let end_element = get_end_element() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let real_num_elem = if gteq_int(LMUL_pow, 0) then num_elem else quot_round_zero(num_elem, sub_atom(0, LMUL_pow)) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { let tail_ag : agtype = get_vtype_vta() in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if lt_int(i, start_element) then { result[i] = plain_vector_access(vd_val, i) } else if or_bool(gt_int(i, end_element), gteq_int(i, real_num_elem)) then { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } } else { result[i] = if plain_vector_access(vm_val, i) then rs1_val else plain_vector_access(vs2_val, i) } }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfeq.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfeq.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfge.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfgt.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfle.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfle.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmflt.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmflt.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfne.vf","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_fvfmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:840.17-840.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar_fp(rs1, __id(m)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VFM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), rs1_val)), VFM_VMFLE => fp_le(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGE => fp_ge(plain_vector_access(vs2_val, i), rs1_val), VFM_VMFGT => fp_gt(plain_vector_access(vs2_val, i), rs1_val) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmfne.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_fvvmfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b001","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let rm_3b = _get_Fcsr_FRM(fcsr) in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_fp_vd_unmasked(SEW, rm_3b) then { handle_illegal(); return RETIRE_FAIL } else (); assert(neq_int(SEW, 8), \\"model/riscv_insts_vext_vm.sail:776.17-776.18\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { FVVM_VMFEQ => fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFNE => not_bool(fp_eq(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), FVVM_VMFLE => fp_le(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), FVVM_VMFLT => fp_lt(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmin.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmin.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vminu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vminu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmnand.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmnor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmornot.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_vvmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), sub_atom(pow2(SEW), 1)), VVMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VVM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,vs2,rs1","format":"TBD","fields":[{"field":"encdec_vxmcfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXMC_VMADC => gt_int(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), sub_atom(pow2(SEW), 1)), VXMC_VMSBC => lt_int(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, LMUL_pow, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXM_VMADC => gt_int(add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), sub_atom(pow2(SEW), 1)), VXM_VMSBC => lt_int(sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i)))), 0) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsbf.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00001","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { if plain_vector_access(vs2_val, i) then found_elem = true else (); result[i] = if found_elem then false else true } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmseq.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgt.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgt.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgtu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsgtu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsif.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00011","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = if found_elem then false else true; if plain_vector_access(vs2_val, i) then found_elem = true else () } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsle.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsleu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmslt.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmslt.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsltu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsltu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vicmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VICMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), imm_val), VICMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)), VICMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(imm_val)), VICMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(imm_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VVCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VVCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), VVCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), VVCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsne.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxcmpfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let res : bool = match funct6 { VXCMP_VMSEQ => eq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSNE => neq_bits(plain_vector_access(vs2_val, i), rs1_val), VXCMP_VMSLTU => lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLT => lt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSLEU => lteq_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSLE => lteq_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), VXCMP_VMSGTU => gt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), VXCMP_VMSGT => gt_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) } in { result[i] = res } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmsof.m","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010100","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b00010","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_normal(vd, vm), or_bool(not(assert_vstart(0)), eq_bits(vd, vs2))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vd_val, vm_val); var found_elem : bool = false in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { if and_bool(plain_vector_access(vs2_val, i), not(found_elem)) then { result[i] = true; found_elem = true } else { result[i] = false } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulh.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulh.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmulhu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.s.x","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gt_int(num_elem, 0), \\"model/riscv_insts_vext_arith.sail:2301.21-2301.22\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, __id(m)) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, 0, vd_val, vm_val); if plain_vector_access(mask, 0) then result[0] = rs1_val else (); let tail_ag : agtype = get_vtype_vta() in { foreach (i from 1 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = match tail_ag { UNDISTURBED => plain_vector_access(vd_val, i), AGNOSTIC => plain_vector_access(vd_val, i) } }; write_vreg(num_elem, SEW, 0, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.i","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"simm","type":"bits(5)"}],"syntax":"vd,simm","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = imm_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = plain_vector_access(vs1_val, i) else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.v.x","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd,rs1","format":"TBD","fields":[{"field":"0b010111","size":6},{"field":"0b1","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let rs1_val : bits(\'m) = get_scalar(rs1, __id(m)) in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then result[i] = rs1_val else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv.x.s","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"rd,vs2","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"0b00000","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let num_elem = get_num_elem(0, SEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gt_int(num_elem, 0), \\"model/riscv_insts_vext_arith.sail:1830.21-1830.22\\"); let n as \'n = num_elem in { let m as \'m = SEW in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, 0, vs2) in { wX_bits(rd, if lt_int(64, SEW) then slice(plain_vector_access(vs2_val, 0), 0, 64) else if gt_int(64, SEW) then sign_extend(64, plain_vector_access(vs2_val, 0)) else plain_vector_access(vs2_val, 0)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } }","description":"TBD"},{"mnemonic":"vmv1r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv2r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv4r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmv8r.v","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"}],"syntax":"vd,vs2","format":"TBD","fields":[{"field":"0b100111","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let start_element = get_start_element() in { let SEW = get_sew() in { let imm_val = unsigned(zero_extend(64, simm)) in { let EMUL = add_atom(imm_val, 1) in { if not(or_bool(eq_int(EMUL, 1), or_bool(eq_int(EMUL, 2), or_bool(eq_int(EMUL, 4), eq_int(EMUL, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); let EMUL_pow = log2(EMUL) in { let num_elem = get_num_elem(EMUL_pow, SEW) in { let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, 0b1, 0b00000) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, EMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { result[i] = if lt_int(i, start_element) then plain_vector_access(vd_val, i) else plain_vector_access(vs2_val, i) }; write_vreg(num_elem, SEW, EMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmxnor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vmxor.mm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"}],"syntax":"vd,vs2,vs1","format":"TBD","fields":[{"field":"encdec_mmfunct6(funct6)","size":6},{"field":"0b1","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vs1_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs1) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { let vd_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vd) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_carry(num_elem, SEW, 0, vd_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MM_VMAND => and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNAND => not(and_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMANDNOT => and_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXOR => neq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMOR => or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), MM_VMNOR => not(or_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i))), MM_VMORNOT => or_bool(plain_vector_access(vs2_val, i), not(plain_vector_access(vs1_val, i))), MM_VMXNOR => eq_bool(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)) } } else () }; write_vmask(num_elem, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:1043.24-1043.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NI_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NI_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:301.24-301.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NV_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NV_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclip.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:653.24-653.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NX_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NX_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:1043.24-1043.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NI_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NI_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:301.24-301.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NV_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NV_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnclipu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:653.24-653.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { result[i] = match funct6 { NX_VNCLIPU => { let result_wide = add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(o), rounding_incr)) in { unsigned_saturation(__id(m), result_wide) } }, NX_VNCLIP => { let v_double : bits((\'m * 4)) = sign_extend(mult_atom(__id(m), 4), plain_vector_access(vs2_val, i)) in { let result_wide = add_bits(slice(shiftr(v_double, shift_amount), 0, __id(o)), zero_extend(__id(o), rounding_incr)) in { signed_saturation(__id(m), result_wide) } } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsac.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsac.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvvmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVV_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i))), 0)), MVV_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVV_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnmsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_mvxmafunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VMACC => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0), plain_vector_access(vd_val, i)), MVX_VNMSAC => sub_vec(plain_vector_access(vd_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i))), 0)), MVX_VMADD => add_bits(get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0), plain_vector_access(vs2_val, i)), MVX_VNMSUB => sub_vec(plain_vector_access(vs2_val, i), get_slice_int(SEW, mult_atom(signed(rs1_val), signed(plain_vector_access(vd_val, i))), 0)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nisfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:976.24-976.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NIS_VNSRL => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NIS_VNSRA => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:234.24-234.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NVS_VNSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NVS_VNSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsra.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:586.24-586.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NXS_VNSRL => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NXS_VNSRA => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_nisfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:976.24-976.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NIS_VNSRL => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NIS_VNSRA => { let shift_amount = get_shift_amount(imm_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_nvsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:234.24-234.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NVS_VNSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NVS_VNSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vnsrl.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_nxsfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow_widen, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(lteq_int(SEW_widen, 64), \\"model/riscv_insts_vext_arith.sail:586.24-586.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { NXS_VNSRL => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { slice(shiftr(plain_vector_access(vs2_val, i), shift_amount), 0, SEW) } }, NXS_VNSRA => { let shift_amount = get_shift_amount(rs1_val, SEW_widen) in { let v_double : bits((\'o * 2)) = sign_extend(mult_atom(__id(o), 2), plain_vector_access(vs2_val, i)) in { let arith_shifted : bits(\'o) = slice(shiftr(v_double, shift_amount), 0, SEW_widen) in { slice(arith_shifted, 0, SEW) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vor.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vpopc.m","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"rd,vs2vm","format":"TBD","fields":[{"field":"0b010000","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"0b10000","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = mult_atom(unsigned(vlenb), 8) in { if or_bool(illegal_vd_unmasked(), not(assert_vstart(0))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs2_val : vector(\'n, bool) = read_vmask(num_elem, 0b0, vs2) in { var result : vector(\'n, bool) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result_cmp(num_elem, SEW, 0, vs2_val, vm_val); var count : nat = 0 in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if and_bool(plain_vector_access(mask, i), plain_vector_access(vs2_val, i)) then count = add_atom(count, 1) else () }; wX_bits(rd, to_bits(64, count)); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredand.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmax.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmaxu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredmin.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredminu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredor.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredsum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vredxor.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW) in { if illegal_reduction() then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'m)) = read_vreg(num_elem_vd, SEW, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'m) = read_single_element(SEW, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { sum = match funct6 { MVV_VREDSUM => add_bits(sum, plain_vector_access(vs2_val, i)), MVV_VREDAND => and_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDOR => or_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDXOR => xor_vec(sum, plain_vector_access(vs2_val, i)), MVV_VREDMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))), MVV_VREDMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(sum))), MVV_VREDMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(sum))) } } else () }; write_single_element(SEW, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrem.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrem.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vremu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_mvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVV_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i))) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVV_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), 0), MVV_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), SEW), MVV_VDIVU => { let q : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, q) } }, MVV_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVV_VREMU => { let r : int = if eq_int(unsigned(plain_vector_access(vs1_val, i)), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } }, MVV_VREM => { let r : int = if eq_int(signed(plain_vector_access(vs1_val, i)), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i))) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vremu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgather.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrgatherei16.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrsub.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vrsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsbc.vvm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,vs1,v0","format":"TBD","fields":[{"field":"encdec_vvmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VVMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VVMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsbc.vxm","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"v0","type":"unknown"}],"syntax":"vd,vs2,rs1,v0","format":"TBD","fields":[{"field":"encdec_vxmsfunct6(funct6)","size":6},{"field":"0b0","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_vd_masked(vd) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { var vec_trues : vector(\'n, bool) = undefined in { foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { vec_trues[i] = true }; let vm_val : vector(\'n, bool) = read_vmask_carry(num_elem, 0b0, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vec_trues); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VXMS_VADC => to_bits(SEW, add_atom(add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))), VXMS_VSBC => to_bits(SEW, sub_atom(sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), unsigned(bool_to_bits(plain_vector_access(vm_val, i))))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vse16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vse8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetivli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"uimm","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,uimm,sewlmultama","format":"TBD","fields":[{"field":"0b1100","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"uimm","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))); let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { let AVL = unsigned(uimm) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetvl","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,rs1,sewlmultama","format":"TBD","fields":[{"field":"encdec_vsetop(op)","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { match op { VSETVLI => { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))) }, VSETVL => { let rs2 : regidx = bitvector_concat(subrange_bits(sew, 1, 0), lmul) in { _set_Vtype_bits(ref vtype, rX_bits(rs2)) } } }; let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { if neq_bits(rs1, 0b00000) then { let rs1_val = rX_bits(rs1) in { let AVL = unsigned(rs1_val) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl) } } } else if neq_bits(rd, 0b00000) then { let AVL = unsigned(ones(64)) in { vl = to_bits(64, VLMAX); wX_bits(rd, vl) } } else { let AVL = unsigned(vl) in { let ratio_pow_new = sub_atom(SEW_pow_new, LMUL_pow_new) in { if neq_int(ratio_pow_new, ratio_pow_ori) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64) } else () } } }; print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } }","description":"TBD"},{"mnemonic":"vsetvli","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"sew","type":"bits(3)"},{"name":"lmul","type":"bits(3)"},{"name":"ta","type":"bits(1)"},{"name":"ma","type":"bits(1)"}],"syntax":"rd,rs1,sewlmultama","format":"TBD","fields":[{"field":"encdec_vsetop(op)","size":4},{"field":"ma","size":1},{"field":"ta","size":1},{"field":"sew","size":3},{"field":"lmul","size":3},{"field":"rs1","size":5},{"field":"0b111","size":3},{"field":"rd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let VLEN_pow = get_vlen_pow() in { let ELEN_pow = get_elen_pow() in { let LMUL_pow_ori = get_lmul_pow() in { let SEW_pow_ori = get_sew_pow() in { let ratio_pow_ori = sub_atom(SEW_pow_ori, LMUL_pow_ori) in { match op { VSETVLI => { _set_Vtype_bits(ref vtype, bitvector_concat(0b0, bitvector_concat(zeros_implicit(sub_atom(64, 9)), bitvector_concat(ma, bitvector_concat(ta, bitvector_concat(sew, lmul)))))) }, VSETVL => { let rs2 : regidx = bitvector_concat(subrange_bits(sew, 1, 0), lmul) in { _set_Vtype_bits(ref vtype, rX_bits(rs2)) } } }; let LMUL_pow_new = get_lmul_pow() in { let SEW_pow_new = get_sew_pow() in { if gt_int(SEW_pow_new, add_atom(LMUL_pow_new, ELEN_pow)) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64); print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); return RETIRE_SUCCESS } else (); let VLMAX = int_power(2, sub_atom(add_atom(VLEN_pow, LMUL_pow_new), SEW_pow_new)) in { if neq_bits(rs1, 0b00000) then { let rs1_val = rX_bits(rs1) in { let AVL = unsigned(rs1_val) in { vl = if lteq_int(AVL, VLMAX) then to_bits(64, AVL) else if lt_int(AVL, mult_atom(2, VLMAX)) then to_bits(64, quot_round_zero(add_atom(AVL, 1), 2)) else to_bits(64, VLMAX); wX_bits(rd, vl) } } } else if neq_bits(rd, 0b00000) then { let AVL = unsigned(ones(64)) in { vl = to_bits(64, VLMAX); wX_bits(rd, vl) } } else { let AVL = unsigned(vl) in { let ratio_pow_new = sub_atom(SEW_pow_new, LMUL_pow_new) in { if neq_int(ratio_pow_new, ratio_pow_ori) then { _set_Vtype_bits(ref vtype, bitvector_concat(0b1, zeros_implicit(sub_atom(64, 1)))); vl = zeros_implicit(64) } else () } } }; print_reg(concat_str(\\"CSR vtype <- \\", string_of_bits(_get_Vtype_bits(vtype)))); print_reg(concat_str(\\"CSR vl <- \\", string_of_bits(vl))); vstart = zeros_implicit(16); print_reg(concat_str(\\"CSR vstart <- \\", string_of_bits(vstart))); RETIRE_SUCCESS } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf2","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext2_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_half = quot_round_zero(SEW, 2) in { let LMUL_pow_half = sub_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_half, LMUL_pow_half), not(valid_reg_overlap(vs2, vd, LMUL_pow_half, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_half in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_half, LMUL_pow_half, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_half), \\"model/riscv_insts_vext_arith.sail:1679.23-1679.24\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT2_ZVF2 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT2_SVF2 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf4","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext4_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_quart = quot_round_zero(SEW, 4) in { let LMUL_pow_quart = sub_atom(LMUL_pow, 2) in { if or_bool(illegal_variable_width(vd, vm, SEW_quart, LMUL_pow_quart), not(valid_reg_overlap(vs2, vd, LMUL_pow_quart, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_quart in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_quart, LMUL_pow_quart, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_quart), \\"model/riscv_insts_vext_arith.sail:1737.24-1737.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT4_ZVF4 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT4_SVF4 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsext.vf8","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext8_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_eighth = quot_round_zero(SEW, 8) in { let LMUL_pow_eighth = sub_atom(LMUL_pow, 3) in { if or_bool(illegal_variable_width(vd, vm, SEW_eighth, LMUL_pow_eighth), not(valid_reg_overlap(vs2, vd, LMUL_pow_eighth, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_eighth in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_eighth, LMUL_pow_eighth, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_eighth), \\"model/riscv_insts_vext_arith.sail:1795.25-1795.26\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT8_ZVF8 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT8_SVF8 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslide1down.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslide1up.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_mvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { MVX_VAADDU => { let result_add = add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VAADD => { let result_add = add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_add, 1) in { add_bits(slice(shiftr(result_add, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUBU => { let result_sub = sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VASUB => { let result_sub = sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val)) in { let rounding_incr = get_fixed_rounding_incr(result_sub, 1) in { add_bits(slice(shiftr(result_sub, 1), 0, __id(m)), zero_extend(__id(m), rounding_incr)) } } }, MVX_VSLIDE1UP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(i, 0) then rs1_val else plain_vector_access(vs2_val, sub_atom(i, 1)) }, MVX_VSLIDE1DOWN => { let last_elem = get_end_element() in { assert(lt_int(last_elem, num_elem), \\"model/riscv_insts_vext_arith.sail:1974.57-1974.58\\"); if lt_int(i, last_elem) then plain_vector_access(vs2_val, add_atom(i, 1)) else rs1_val } }, MVX_VMUL => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), 0), MVX_VMULH => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)), SEW), MVX_VMULHU => get_slice_int(SEW, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VMULHSU => get_slice_int(SEW, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val)), SEW), MVX_VDIVU => { let q : int = if eq_int(unsigned(rs1_val), 0) then -1 else quot_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, q) } }, MVX_VDIV => { let elem_max : int = sub_atom(pow2(sub_atom(SEW, 1)), 1) in { let elem_min : int = sub_atom(0, pow2(sub_atom(SEW, 1))) in { let q : int = if eq_int(signed(rs1_val), 0) then -1 else quot_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { let q\' : int = if gt_int(q, elem_max) then elem_min else q in { to_bits(SEW, q\') } } } } }, MVX_VREMU => { let r : int = if eq_int(unsigned(rs1_val), 0) then unsigned(plain_vector_access(vs2_val, i)) else rem_round_zero(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) in { to_bits(SEW, r) } }, MVX_VREM => { let r : int = if eq_int(signed(rs1_val), 0) then signed(plain_vector_access(vs2_val, i)) else rem_round_zero(signed(plain_vector_access(vs2_val, i)), signed(rs1_val)) in { to_bits(SEW, r) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslidedown.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslidedown.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslideup.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_visgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : nat = unsigned(zero_extend(64, simm)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, imm_val) then plain_vector_access(vs2_val, sub_atom(i, imm_val)) else plain_vector_access(vd_val, i) }, VI_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1118.58-1118.59\\"); if lt_int(add_atom(i, imm_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, imm_val)) else zeros_implicit(__id(m)) } }, VI_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:1124.58-1124.59\\"); if lt_int(imm_val, VLMAX) then plain_vector_access(vs2_val, imm_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vslideup.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxsgfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : nat = unsigned(rX_bits(rs1)) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VSLIDEUP => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); if gteq_int(i, rs1_val) then plain_vector_access(vs2_val, sub_atom(i, rs1_val)) else plain_vector_access(vd_val, i) }, VX_VSLIDEDOWN => { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:728.58-728.59\\"); if lt_int(add_atom(i, rs1_val), VLMAX) then plain_vector_access(vs2_val, add_atom(i, rs1_val)) else zeros_implicit(__id(m)) } }, VX_VRGATHER => { if eq_bits(vs2, vd) then { handle_illegal(); return RETIRE_FAIL } else (); let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(and_bool(gt_int(VLMAX, 0), lteq_int(VLMAX, __id(n))), \\"model/riscv_insts_vext_arith.sail:734.58-734.59\\"); if lt_int(rs1_val, VLMAX) then plain_vector_access(vs2_val, rs1_val) else zeros_implicit(__id(m)) } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsll.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsm.v","name":"TBD","operands":[{"name":"vd_or_vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vd_or_vs3,(rs1)","format":"TBD","fields":[{"field":"0b000","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01011","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vd_or_vs3","size":5},{"field":"encdec_lsop(op)","size":7}],"extensions":["V"],"function":"{ let EEW = 8 in { let EMUL_pow = 0 in { let vl_val = unsigned(vl) in { let evl : int = if eq_int(emod_int(vl_val, 8), 0) then quot_round_zero(vl_val, 8) else add_atom(quot_round_zero(vl_val, 8), 1) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { if illegal_vd_unmasked() then { handle_illegal(); return RETIRE_FAIL } else (); assert(gteq_int(evl, 0), \\"model/riscv_insts_vext_mem.sail:929.17-929.18\\"); process_vm(vd_or_vs3, rs1, num_elem, evl, op) } } } } } }","description":"TBD"},{"mnemonic":"vsmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg2ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg3ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg4ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg5ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg6ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg7ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsoxseg8ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsr.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsra.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsra.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsra.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsrl.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsse8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg2r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg3r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg4r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg5r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg6r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg7r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1)vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"vm","size":1},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsseg(nf_int, vm, vs3, load_width_bytes, rs1, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsseg8r.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"vs3,(rs1)","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b00","size":2},{"field":"0b1","size":1},{"field":"0b01000","size":5},{"field":"rs1","size":5},{"field":"0b000","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = 1 in { let EEW = 8 in { let VLEN = mult_atom(unsigned(vlenb), 8) in { let elem_per_reg : int = quot_round_zero(VLEN, EEW) in { let nf_int = nfields_int_forwards(nf) in { assert(gteq_int(elem_per_reg, 0), \\"model/riscv_insts_vext_mem.sail:838.26-838.27\\"); if not(or_bool(eq_int(nf_int, 1), or_bool(eq_int(nf_int, 2), or_bool(eq_int(nf_int, 4), eq_int(nf_int, 8))))) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsre(nf_int, load_width_bytes, rs1, vs3, elem_per_reg) } } } } } }","description":"TBD"},{"mnemonic":"vssra.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssra.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssra.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssrl.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg2e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg3e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg4e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg5e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg6e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg7e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssseg8e8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),rs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b10","size":2},{"field":"vm","size":1},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let load_width_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW = mult_atom(load_width_bytes, 8) in { let EEW_pow = vlewidth_pow_forwards(width) in { let SEW_pow = get_sew_pow() in { let LMUL_pow = get_lmul_pow() in { let EMUL_pow = add_atom(sub_atom(EEW_pow, SEW_pow), LMUL_pow) in { let num_elem = get_num_elem(EMUL_pow, EEW) in { let nf_int = nfields_int_forwards(nf) in { if illegal_store(nf_int, EEW, EMUL_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vssseg(nf_int, vm, vs3, load_width_bytes, rs1, rs2, EMUL_pow, num_elem) } } } } } } } } }","description":"TBD"},{"mnemonic":"vssub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vssubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg2ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg3ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg4ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg5ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg6ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg7ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei16.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei32.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei64.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vsuxseg8ei8.v","name":"TBD","operands":[{"name":"vs3","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vs3,(rs1),vs2vm","format":"TBD","fields":[{"field":"nf","size":3},{"field":"0b0","size":1},{"field":"0b01","size":2},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"encdec_vlewidth(width)","size":3},{"field":"vs3","size":5},{"field":"0b0100111","size":7}],"extensions":["V"],"function":"{ let EEW_index_pow = vlewidth_pow_forwards(width) in { let EEW_index_bytes = vlewidth_bytesnumber_forwards(width) in { let EEW_data_pow = get_sew_pow() in { let EEW_data_bytes = get_sew_bytes() in { let EMUL_data_pow = get_lmul_pow() in { let EMUL_index_pow = add_atom(sub_atom(EEW_index_pow, EEW_data_pow), EMUL_data_pow) in { let num_elem = get_num_elem(EMUL_data_pow, mult_atom(EEW_data_bytes, 8)) in { let nf_int = nfields_int_forwards(nf) in { if illegal_indexed_store(nf_int, mult_atom(EEW_index_bytes, 8), EMUL_index_pow, EMUL_data_pow) then { handle_illegal(); return RETIRE_FAIL } else (); process_vsxseg(nf_int, vm, vs3, EEW_index_bytes, EEW_data_bytes, EMUL_index_pow, EMUL_data_pow, rs1, vs2, num_elem, 1) } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwadd.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwaddu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmacc.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmacc.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVV_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVV_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs1_val, i)), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmaccus.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,rs1,vs2vm","format":"TBD","fields":[{"field":"encdec_wmvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WMVX_VWMACCU => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACC => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCUS => add_bits(to_bits(SEW_widen, mult_atom(unsigned(rs1_val), signed(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)), WMVX_VWMACCSU => add_bits(to_bits(SEW_widen, mult_atom(signed(rs1_val), unsigned(plain_vector_access(vs2_val, i)))), plain_vector_access(vd_val, i)) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmul.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmul.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulsu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulsu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwmulu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwredsum.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rivvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW_widen) in { if illegal_reduction_widen(SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'o)) = read_vreg(num_elem_vd, SEW_widen, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'o) = read_single_element(SEW_widen, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let elem : bits(\'o) = match funct6 { IVV_VWREDSUMU => to_bits(SEW_widen, unsigned(plain_vector_access(vs2_val, i))), IVV_VWREDSUM => to_bits(SEW_widen, signed(plain_vector_access(vs2_val, i))) } in { sum = add_bits(sum, elem) } } else () }; write_single_element(SEW_widen, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwredsumu.vs","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_rivvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { let num_elem_vs = get_num_elem(LMUL_pow, SEW) in { let num_elem_vd = get_num_elem(0, SEW_widen) in { if illegal_reduction_widen(SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); if eq_int(unsigned(vl), 0) then return RETIRE_SUCCESS else (); let n as \'n = num_elem_vs in { let d as \'d = num_elem_vd in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem_vs, vm, 0b00000) in { let vd_val : vector(\'d, bits(\'o)) = read_vreg(num_elem_vd, SEW_widen, 0, vd) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem_vs, SEW, LMUL_pow, vs2) in { let mask : vector(\'n, bool) = init_masked_source(num_elem_vs, LMUL_pow, vm_val) in { var sum : bits(\'o) = read_single_element(SEW_widen, 0, vs1) in { foreach (i from 0 to sub_atom(num_elem_vs, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { let elem : bits(\'o) = match funct6 { IVV_VWREDSUMU => to_bits(SEW_widen, unsigned(plain_vector_access(vs2_val, i))), IVV_VWREDSUM => to_bits(SEW_widen, signed(plain_vector_access(vs2_val, i))) } in { sum = add_bits(sum, elem) } } else () }; write_single_element(SEW_widen, 0, vd, sum); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsub.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), or_bool(not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen)), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen)))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WVV_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WVV_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wvxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs2, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WVX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMUL => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WVX_VWMULU => to_bits(SEW_widen, mult_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WVX_VWMULSU => to_bits(SEW_widen, mult_atom(signed(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.wv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_wvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen), not(valid_reg_overlap(vs1, vd, LMUL_pow, LMUL_pow_widen))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WV_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), WV_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), WV_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vwsubu.wx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_wxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b110","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_widen = mult_atom(SEW, 2) in { let LMUL_pow_widen = add_atom(LMUL_pow, 1) in { if illegal_variable_width(vd, vm, SEW_widen, LMUL_pow_widen) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_widen in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_widen, LMUL_pow_widen, vs2) in { var result : vector(\'n, bits(\'o)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW_widen, LMUL_pow_widen, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { WX_VADD => to_bits(SEW_widen, add_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VSUB => to_bits(SEW_widen, sub_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), WX_VADDU => to_bits(SEW_widen, add_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), WX_VSUBU => to_bits(SEW_widen, sub_atom(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))) } } else () }; write_vreg(num_elem, SEW_widen, LMUL_pow_widen, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vi","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"simm","type":"bits(5)"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,simmvm","format":"TBD","fields":[{"field":"encdec_vifunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"simm","size":5},{"field":"0b011","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let imm_val : bits(\'m) = sign_extend(__id(m), simm) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VI_VADD => add_bits(plain_vector_access(vs2_val, i), imm_val), VI_VRSUB => sub_vec(imm_val, plain_vector_access(vs2_val, i)), VI_VAND => and_vec(plain_vector_access(vs2_val, i), imm_val), VI_VOR => or_vec(plain_vector_access(vs2_val, i), imm_val), VI_VXOR => xor_vec(plain_vector_access(vs2_val, i), imm_val), VI_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), imm_val))), VI_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), imm_val))), VI_VSLL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VI_VSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VI_VSSRL => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VI_VSSRA => { let shift_amount = get_shift_amount(zero_extend(__id(m), simm), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vv","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,vs1vm","format":"TBD","fields":[{"field":"encdec_vvfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vs1","size":5},{"field":"0b000","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW_pow = get_sew_pow() in { let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let VLEN_pow = get_vlen_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vs1_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs1) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VV_VADD => add_bits(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSUB => sub_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VAND => and_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VOR => or_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VXOR => xor_vec(plain_vector_access(vs2_val, i), plain_vector_access(vs1_val, i)), VV_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i))) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))) }, VV_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), plain_vector_access(vs1_val, i)))), VV_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VV_VSLL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VV_VSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VV_VSSRL => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VV_VSSRA => { let shift_amount = get_shift_amount(plain_vector_access(vs1_val, i), SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VV_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(plain_vector_access(vs1_val, i)))), VV_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(plain_vector_access(vs1_val, i)))), VV_VRGATHER => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let idx = unsigned(plain_vector_access(vs1_val, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:150.48-150.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } }, VV_VRGATHEREI16 => { if or_bool(eq_bits(vs1, vd), eq_bits(vs2, vd)) then { handle_illegal(); return RETIRE_FAIL } else (); let vs1_new : vector(\'n, bits(16)) = read_vreg(num_elem, 16, sub_atom(add_atom(4, LMUL_pow), SEW_pow), vs1) in { let idx = unsigned(plain_vector_access(vs1_new, i)) in { let VLMAX = int_power(2, sub_atom(add_atom(LMUL_pow, VLEN_pow), SEW_pow)) in { assert(lteq_int(VLMAX, __id(n)), \\"model/riscv_insts_vext_arith.sail:159.48-159.49\\"); if lt_int(idx, VLMAX) then plain_vector_access(vs2_val, idx) else zeros_implicit(__id(m)) } } } } } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vxor.vx","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2,rs1vm","format":"TBD","fields":[{"field":"encdec_vxfunct6(funct6)","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { if illegal_normal(vd, vm) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let rs1_val : bits(\'m) = get_scalar(rs1, SEW) in { let vs2_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vs2) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VX_VADD => add_bits(plain_vector_access(vs2_val, i), rs1_val), VX_VSUB => sub_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VRSUB => sub_vec(rs1_val, plain_vector_access(vs2_val, i)), VX_VAND => and_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VOR => or_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VXOR => xor_vec(plain_vector_access(vs2_val, i), rs1_val), VX_VSADDU => unsigned_saturation(__id(m), add_bits(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))), VX_VSADD => signed_saturation(__id(m), add_bits(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSSUBU => { if lt_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val)) then zeros_implicit(__id(m)) else unsigned_saturation(__id(m), sub_vec(zero_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), zero_extend(add_atom(__id(m), 1), rs1_val))) }, VX_VSSUB => signed_saturation(__id(m), sub_vec(sign_extend(add_atom(__id(m), 1), plain_vector_access(vs2_val, i)), sign_extend(add_atom(__id(m), 1), rs1_val))), VX_VSMUL => { let result_mul = to_bits(mult_atom(__id(m), 2), mult_atom(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) in { let rounding_incr = get_fixed_rounding_incr(result_mul, sub_atom(__id(m), 1)) in { let result_wide = add_bits(shiftr(result_mul, sub_atom(__id(m), 1)), zero_extend(mult_atom(__id(m), 2), rounding_incr)) in { signed_saturation(__id(m), subrange_bits(result_wide, __id(m), 0)) } } } }, VX_VSLL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftl(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { shiftr(plain_vector_access(vs2_val, i), shift_amount) } }, VX_VSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { slice(shiftr(v_double, shift_amount), 0, SEW) } } }, VX_VSSRL => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { add_bits(shiftr(plain_vector_access(vs2_val, i), shift_amount), zero_extend(__id(m), rounding_incr)) } } }, VX_VSSRA => { let shift_amount = get_shift_amount(rs1_val, SEW) in { let rounding_incr = get_fixed_rounding_incr(plain_vector_access(vs2_val, i), shift_amount) in { let v_double : bits((\'m * 2)) = sign_extend(mult_atom(__id(m), 2), plain_vector_access(vs2_val, i)) in { add_bits(slice(shiftr(v_double, shift_amount), 0, SEW), zero_extend(__id(m), rounding_incr)) } } } }, VX_VMINU => to_bits(SEW, min_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMIN => to_bits(SEW, min_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))), VX_VMAXU => to_bits(SEW, max_int(unsigned(plain_vector_access(vs2_val, i)), unsigned(rs1_val))), VX_VMAX => to_bits(SEW, max_int(signed(plain_vector_access(vs2_val, i)), signed(rs1_val))) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf2","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext2_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_half = quot_round_zero(SEW, 2) in { let LMUL_pow_half = sub_atom(LMUL_pow, 1) in { if or_bool(illegal_variable_width(vd, vm, SEW_half, LMUL_pow_half), not(valid_reg_overlap(vs2, vd, LMUL_pow_half, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_half in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_half, LMUL_pow_half, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_half), \\"model/riscv_insts_vext_arith.sail:1679.23-1679.24\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT2_ZVF2 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT2_SVF2 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf4","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext4_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_quart = quot_round_zero(SEW, 4) in { let LMUL_pow_quart = sub_atom(LMUL_pow, 2) in { if or_bool(illegal_variable_width(vd, vm, SEW_quart, LMUL_pow_quart), not(valid_reg_overlap(vs2, vd, LMUL_pow_quart, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_quart in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_quart, LMUL_pow_quart, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_quart), \\"model/riscv_insts_vext_arith.sail:1737.24-1737.25\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT4_ZVF4 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT4_SVF4 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"vzext.vf8","name":"TBD","operands":[{"name":"vd","type":"regidx"},{"name":"vs2","type":"regidx"},{"name":"vm","type":"bits(1)"}],"syntax":"vd,vs2vm","format":"TBD","fields":[{"field":"0b010010","size":6},{"field":"vm","size":1},{"field":"vs2","size":5},{"field":"vext8_vs1(funct6)","size":5},{"field":"0b010","size":3},{"field":"vd","size":5},{"field":"0b1010111","size":7}],"extensions":["V"],"function":"{ let SEW = get_sew() in { let LMUL_pow = get_lmul_pow() in { let num_elem = get_num_elem(LMUL_pow, SEW) in { let SEW_eighth = quot_round_zero(SEW, 8) in { let LMUL_pow_eighth = sub_atom(LMUL_pow, 3) in { if or_bool(illegal_variable_width(vd, vm, SEW_eighth, LMUL_pow_eighth), not(valid_reg_overlap(vs2, vd, LMUL_pow_eighth, LMUL_pow))) then { handle_illegal(); return RETIRE_FAIL } else (); let n as \'n = num_elem in { let m as \'m = SEW in { let o as \'o = SEW_eighth in { let vm_val : vector(\'n, bool) = read_vmask(num_elem, vm, 0b00000) in { let vd_val : vector(\'n, bits(\'m)) = read_vreg(num_elem, SEW, LMUL_pow, vd) in { let vs2_val : vector(\'n, bits(\'o)) = read_vreg(num_elem, SEW_eighth, LMUL_pow_eighth, vs2) in { var result : vector(\'n, bits(\'m)) = undefined in { var mask : vector(\'n, bool) = undefined in { (result, mask) = init_masked_result(num_elem, SEW, LMUL_pow, vd_val, vm_val); assert(gt_int(SEW, SEW_eighth), \\"model/riscv_insts_vext_arith.sail:1795.25-1795.26\\"); foreach (i from 0 to sub_atom(num_elem, 1) by 1 order inc) { { if plain_vector_access(mask, i) then { result[i] = match funct6 { VEXT8_ZVF8 => zero_extend(__id(m), plain_vector_access(vs2_val, i)), VEXT8_SVF8 => sign_extend(__id(m), plain_vector_access(vs2_val, i)) } } else () }; write_vreg(num_elem, SEW, LMUL_pow, vd, result); vstart = zeros_implicit(16); RETIRE_SUCCESS } } } } } } } } } } } } } }","description":"TBD"},{"mnemonic":"wfi","name":"TBD","operands":[],"syntax":"","format":"TBD","fields":[{"field":"0b000100000101","size":12},{"field":"0b00000","size":5},{"field":"0b000","size":3},{"field":"0b00000","size":5},{"field":"0b1110011","size":7}],"extensions":[],"function":"match cur_privilege { Machine => { platform_wfi(); RETIRE_SUCCESS }, Supervisor => if eq_bits(_get_Mstatus_TW(mstatus), 0b1) then { handle_illegal(); RETIRE_FAIL } else { platform_wfi(); RETIRE_SUCCESS }, User => { handle_illegal(); RETIRE_FAIL } }","description":"TBD"},{"mnemonic":"xnor","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0110000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbb","Zbkb"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ANDN => and_vec(rs1_val, not_vec(rs2_val)), RISCV_ORN => or_vec(rs1_val, not_vec(rs2_val)), RISCV_XNOR => not_vec(xor_vec(rs1_val, rs2_val)), RISCV_MAX => to_bits(64, max_int(signed(rs1_val), signed(rs2_val))), RISCV_MAXU => to_bits(64, max_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_MIN => to_bits(64, min_int(signed(rs1_val), signed(rs2_val))), RISCV_MINU => to_bits(64, min_int(unsigned(rs1_val), unsigned(rs2_val))), RISCV_ROL => if eq_int(64, 32) then rotate_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_ROR => if eq_int(64, 32) then rotate_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else rotate_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xor","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0100000","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b101","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { let result : xlenbits = match op { RISCV_ADD => add_bits(rs1_val, rs2_val), RISCV_SLT => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, rs2_val))), RISCV_SLTU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, rs2_val))), RISCV_AND => and_vec(rs1_val, rs2_val), RISCV_OR => or_vec(rs1_val, rs2_val), RISCV_XOR => xor_vec(rs1_val, rs2_val), RISCV_SLL => if eq_int(64, 32) then shift_bits_left(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_left(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SRL => if eq_int(64, 32) then shift_bits_right(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_bits_right(rs1_val, subrange_bits(rs2_val, 5, 0)), RISCV_SUB => sub_vec(rs1_val, rs2_val), RISCV_SRA => if eq_int(64, 32) then shift_right_arith32(rs1_val, subrange_bits(rs2_val, 4, 0)) else shift_right_arith64(rs1_val, subrange_bits(rs2_val, 5, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xori","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"imm","type":"bits(12)"}],"syntax":"rd,rs1,imm","format":"TBD","fields":[{"field":"imm","size":12},{"field":"rs1","size":5},{"field":"encdec_iop(op)","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":[],"function":"{ let rs1_val = rX_bits(rs1) in { let immext : xlenbits = sign_extend(64, imm) in { let result : xlenbits = match op { RISCV_ADDI => add_bits(rs1_val, immext), RISCV_SLTI => zero_extend(64, bool_to_bits((operator <_s)(rs1_val, immext))), RISCV_SLTIU => zero_extend(64, bool_to_bits((operator <_u)(rs1_val, immext))), RISCV_ANDI => and_vec(rs1_val, immext), RISCV_ORI => or_vec(rs1_val, immext), RISCV_XORI => xor_vec(rs1_val, immext) } in { wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xperm4","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b010","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkx"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 4) by 4 order inc) { { let index = unsigned(subrange_bits(rs2_val, add_atom(i, 3), i)) in { result[add_atom(i, 3) .. i] = if lt_int(mult_atom(4, index), 64) then subrange_bits(rs1_val, add_atom(mult_atom(4, index), 3), mult_atom(4, index)) else zeros_implicit(add_atom(sub_atom(add_atom(mult_atom(4, __id(index)), 3), mult_atom(4, __id(index))), 1)) } }; wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"xperm8","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"},{"name":"rs2","type":"regidx"}],"syntax":"rd,rs1,rs2","format":"TBD","fields":[{"field":"0b0010100","size":7},{"field":"rs2","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0110011","size":7}],"extensions":["Zbkx"],"function":"{ let rs1_val = rX_bits(rs1) in { let rs2_val = rX_bits(rs2) in { var result : xlenbits = zeros_implicit(64) in { foreach (i from 0 to sub_atom(64, 8) by 8 order inc) { { let index = unsigned(subrange_bits(rs2_val, add_atom(i, 7), i)) in { result[add_atom(i, 7) .. i] = if lt_int(mult_atom(8, index), 64) then subrange_bits(rs1_val, add_atom(mult_atom(8, index), 7), mult_atom(8, index)) else zeros_implicit(add_atom(sub_atom(add_atom(mult_atom(8, __id(index)), 7), mult_atom(8, __id(index))), 1)) } }; wX_bits(rd, result); RETIRE_SUCCESS } } } }","description":"TBD"},{"mnemonic":"zext.h","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b0000100","size":7},{"field":"0b00000","size":5},{"field":"rs1","size":5},{"field":"0b100","size":3},{"field":"rd","size":5},{"field":"0b0111011","size":7}],"extensions":["Zbb"],"function":"{ let rs1_val = rX_bits(rs1) in { let result : xlenbits = match op { RISCV_SEXTB => sign_extend(64, subrange_bits(rs1_val, 7, 0)), RISCV_SEXTH => sign_extend(64, subrange_bits(rs1_val, 15, 0)), RISCV_ZEXTH => zero_extend(64, subrange_bits(rs1_val, 15, 0)) } in { wX_bits(rd, result); RETIRE_SUCCESS } } }","description":"TBD"},{"mnemonic":"zip","name":"TBD","operands":[{"name":"rd","type":"regidx"},{"name":"rs1","type":"regidx"}],"syntax":"rd,rs1","format":"TBD","fields":[{"field":"0b000010001111","size":12},{"field":"rs1","size":5},{"field":"0b001","size":3},{"field":"rd","size":5},{"field":"0b0010011","size":7}],"extensions":["Zbkb"],"function":"{ assert(eq_int(64, 32), \\"model/riscv_insts_zbkb.sail:127.27-127.28\\"); exit () }","description":"TBD"}],"bd":["I","R","TBD"],"Rw":["C","D","F","V","Zba","Zbb","Zbc","Zbkb","Zbkc","Zbkx","Zbs","Zfa","Zfh","Zicond","Zknd","Zkne","Zknh","Zksed","Zksh"]}'),Gx=t(29),Qx=[];function Jx(e,i,t){Qx.push(e)}var $x=function(e){l(t,e);var i=v(t);function t(e){var _;return s(this,t),(_=i.call(this,e)).genData=function(e){for(var i=[],t=0;t0){s="(";for(var a="",n=0;n=0;_--)t.push((0,Yx.jsx)("td",{className:"instruction-bit-number",children:("0"+_.toString()).slice(-2)},_));return t}},{key:"displayLayoutRows",value:function(e,i){for(var t=[],_=0,s=0,a=0;a=i&&(t.push((0,Yx.jsx)("tr",{children:this.displayFields(e.slice(s,a+1))},s)),s=a+1,_=0);return t}},{key:"displayLayout",value:function(e){for(var i=[],t=0,_=0;_32&&(t=32),i.push(this.displayLayoutRows(e,t)),i.push((0,Yx.jsx)("tr",{children:this.displayBitScale(e,t)},"bitScale")),i}},{key:"genItem",value:function(e){return(0,Yx.jsx)("div",{className:"expandContainer",children:(0,Yx.jsxs)("div",{className:"column",children:[this.displayMnemonic(e),(0,Yx.jsx)("br",{}),(0,Yx.jsx)("table",{style:{width:"100%"},children:(0,Yx.jsx)("tbody",{children:(0,Yx.jsxs)("tr",{children:[(0,Yx.jsx)("td",{children:(0,Yx.jsx)("table",{className:"instruction-layout",children:(0,Yx.jsx)("tbody",{children:this.displayLayout(e.fields)})})}),(0,Yx.jsxs)("td",{style:{textAlign:"right"},children:[e.format,"-type"]})]})})}),(0,Yx.jsx)("br",{}),(0,Yx.jsx)(Gx.CopyToClipboard,{text:e.function,children:(0,Yx.jsx)(kE,{className:"pseudocode",type:"multi",feedback:"Copied to clipboard",children:(0,Yx.jsx)("p",{className:"inner",children:e.function})},"pseudocode")}),(0,Yx.jsx)("br",{}),(0,Yx.jsx)("div",{className:"prose",children:e.description})]})})}},{key:"genTitle",value:function(e){return(0,Yx.jsx)("table",{className:"item",children:(0,Yx.jsx)("tbody",{children:(0,Yx.jsxs)("tr",{children:[(0,Yx.jsx)("td",{className:"itemtitledesc",children:e.name}),(0,Yx.jsx)("td",{className:"itemtitlemnem",children:e.mnemonic}),(0,Yx.jsx)("td",{className:"itemtitleext",children:e.extensions.join()})]})})})}},{key:"matchEach",value:function(e){return this.includes(e)}},{key:"matchAny",value:function(e,i){var t=document.getElementById("all-extensions");if(!t)return!0;if(0==e.length)return t.checked;if(e.length>0&&0==i.length)return!1;for(var _=0;_\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","/** @license React v17.0.2\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),m=require(\"object-assign\"),r=require(\"scheduler\");function y(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2h||e[g]!==f[h])return\"\\n\"+e[g].replace(\" at new \",\" at \");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Na(a):\"\"}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na(\"Lazy\");case 13:return Na(\"Suspense\");case 19:return Na(\"SuspenseList\");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return\"\"}}\nfunction Ra(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ua:return\"Fragment\";case ta:return\"Portal\";case xa:return\"Profiler\";case wa:return\"StrictMode\";case Ba:return\"Suspense\";case Ca:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case za:return(a.displayName||\"Context\")+\".Consumer\";case ya:return(a._context.displayName||\"Context\")+\".Provider\";case Aa:var b=a.render;b=b.displayName||b.name||\"\";\nreturn a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,\"checked\",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function db(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var kb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction lb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function mb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?lb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar nb,ob=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||\"innerHTML\"in a)a.innerHTML=b;else{nb=nb||document.createElement(\"div\");nb.innerHTML=\"\";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(\"\"+b).trim():b+\"px\"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=sb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;ad?0:1<c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Pe=fa&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||\"Unknown\",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;az?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;zz?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||\"Component\"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;af))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0c?98:c,function(){a(!0)});gg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case \"dialog\":G(\"cancel\",a);G(\"close\",a);\ne=d;break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eJi&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&\"unstable-defer-without-hiding\"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c=\"\",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi=\"function\"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}var Ui=\"function\"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,\"function\"===typeof d.setProperty?d.setProperty(\"display\",\"none\",\"important\"):d.display=\"none\";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null;d.style.display=sb(\"display\",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?\"\":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&\"function\"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,\"\"),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;ee&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10 component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&(\"function\"===typeof K.getDerivedStateFromError||null!==Q&&\"function\"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});\"function\"===typeof t.focus&&t.focus();for(t=\n0;tO()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","/**\n * Copyright IBM Corp. 2015, 2020\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar enabled$1 = {};\n\ntry {\n if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) {\n if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES === 'true') {\n enabled$1.enableCssCustomProperties = true;\n } else {\n enabled$1.enableCssCustomProperties = false;\n }\n } else {\n enabled$1.enableCssCustomProperties = false;\n }\n\n if (process.env.CARBON_ENABLE_USE_CONTROLLED_STATE_WITH_VALUE) {\n if (process.env.CARBON_ENABLE_USE_CONTROLLED_STATE_WITH_VALUE === 'true') {\n enabled$1.enableUseControlledStateWithValue = true;\n } else {\n enabled$1.enableUseControlledStateWithValue = false;\n }\n } else {\n enabled$1.enableUseControlledStateWithValue = false;\n }\n\n if (process.env.CARBON_ENABLE_CSS_GRID) {\n if (process.env.CARBON_ENABLE_CSS_GRID === 'true') {\n enabled$1.enableCssGrid = true;\n } else {\n enabled$1.enableCssGrid = false;\n }\n } else {\n enabled$1.enableCssGrid = false;\n }\n\n if (process.env.CARBON_ENABLE_V11_RELEASE) {\n if (process.env.CARBON_ENABLE_V11_RELEASE === 'true') {\n enabled$1.enableV11Release = true;\n } else {\n enabled$1.enableV11Release = false;\n }\n } else {\n enabled$1.enableV11Release = false;\n }\n} catch (error) {\n enabled$1.enableCssCustomProperties = false;\n enabled$1.enableUseControlledStateWithValue = false;\n enabled$1.enableCssGrid = false;\n enabled$1.enableV11Release = false;\n}\n\nvar featureFlagInfo = [{\n name: \"enable-css-custom-properties\",\n description: \"Describe what the flag does\",\n enabled: enabled$1.enableCssCustomProperties\n}, {\n name: \"enable-use-controlled-state-with-value\",\n description: \"Enable components to be created in either a controlled or uncontrolled mode\\n\",\n enabled: enabled$1.enableUseControlledStateWithValue\n}, {\n name: \"enable-css-grid\",\n description: \"Enable CSS Grid Layout in the Grid and Column React components\\n\",\n enabled: enabled$1.enableCssGrid\n}, {\n name: \"enable-v11-release\",\n description: \"Enable the features and functionality for the v11 Release\\n\",\n enabled: enabled$1.enableV11Release\n}];\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n/**\n * Copyright IBM Corp. 2015, 2020\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar FeatureFlagScope = /*#__PURE__*/function () {\n function FeatureFlagScope(flags) {\n var _this = this;\n\n _classCallCheck(this, FeatureFlagScope);\n\n this.flags = new Map();\n\n if (flags) {\n Object.keys(flags).forEach(function (key) {\n _this.flags.set(key, flags[key]);\n });\n }\n }\n /**\n * Check to see if a flag exists\n * @param {string} name\n */\n\n\n _createClass(FeatureFlagScope, [{\n key: \"checkForFlag\",\n value: function checkForFlag(name) {\n if (!this.flags.has(name)) {\n throw new Error(\"Unable to find a feature flag with the name: `\".concat(name, \"`\"));\n }\n }\n /**\n * Add a feature flag\n * @param {string} name\n * @param {boolean} enabled\n */\n\n }, {\n key: \"add\",\n value: function add(name, enabled) {\n if (this.flags.has(name)) {\n throw new Error(\"The feature flag: \".concat(name, \" already exists\"));\n }\n\n this.flags.set(name, enabled);\n }\n /**\n * Enable a feature flag\n * @param {string} name\n */\n\n }, {\n key: \"enable\",\n value: function enable(name) {\n this.checkForFlag(name);\n this.flags.set(name, true);\n }\n /**\n * Disable a feature flag\n * @param {string} name\n */\n\n }, {\n key: \"disable\",\n value: function disable(name) {\n this.checkForFlag(name);\n this.flags.set(name, false);\n }\n /**\n * Merge the given feature flags with the current set of feature flags.\n * Duplicate keys will be set to the value in the given feature flags.\n * @param {object} flags\n */\n\n }, {\n key: \"merge\",\n value: function merge(flags) {\n var _this2 = this;\n\n Object.keys(flags).forEach(function (key) {\n _this2.flags.set(key, flags[key]);\n });\n }\n /**\n * @param {FeatureFlagScope} scope\n */\n\n }, {\n key: \"mergeWithScope\",\n value: function mergeWithScope(scope) {\n var _iterator = _createForOfIteratorHelper(scope.flags),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _slicedToArray(_step.value, 2),\n key = _step$value[0],\n value = _step$value[1];\n\n if (this.flags.has(key)) {\n continue;\n }\n\n this.flags.set(key, value);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n /**\n * Check if a feature flag is enabled\n * @param {string} name\n * @returns {boolean}\n */\n\n }, {\n key: \"enabled\",\n value: function enabled(name) {\n this.checkForFlag(name);\n return this.flags.get(name);\n }\n }]);\n\n return FeatureFlagScope;\n}();\n\nvar FeatureFlags = createScope();\n\nfor (var i = 0; i < featureFlagInfo.length; i++) {\n var featureFlag = featureFlagInfo[i];\n FeatureFlags.add(featureFlag.name, featureFlag.enabled);\n}\nfunction createScope(flags) {\n return new FeatureFlagScope(flags);\n}\nfunction add() {\n return FeatureFlags.add.apply(FeatureFlags, arguments);\n}\nfunction enable() {\n return FeatureFlags.enable.apply(FeatureFlags, arguments);\n}\nfunction disable() {\n return FeatureFlags.disable.apply(FeatureFlags, arguments);\n}\nfunction enabled() {\n return FeatureFlags.enabled.apply(FeatureFlags, arguments);\n}\nfunction merge() {\n return FeatureFlags.merge.apply(FeatureFlags, arguments);\n}\n\nexport { FeatureFlags, add, createScope, disable, enable, enabled, merge };\n","/**\n * Copyright IBM Corp. 2016, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nexport { _arrayLikeToArray as arrayLikeToArray, _arrayWithHoles as arrayWithHoles, _arrayWithoutHoles as arrayWithoutHoles, _assertThisInitialized as assertThisInitialized, _classCallCheck as classCallCheck, _createClass as createClass, _createForOfIteratorHelper as createForOfIteratorHelper, _createSuper as createSuper, _defineProperty as defineProperty, _extends as extends, _getPrototypeOf as getPrototypeOf, _inherits as inherits, _isNativeReflectConstruct as isNativeReflectConstruct, _iterableToArray as iterableToArray, _iterableToArrayLimit as iterableToArrayLimit, _nonIterableRest as nonIterableRest, _nonIterableSpread as nonIterableSpread, _objectSpread2 as objectSpread2, _objectWithoutProperties as objectWithoutProperties, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _possibleConstructorReturn as possibleConstructorReturn, _setPrototypeOf as setPrototypeOf, _slicedToArray as slicedToArray, _toConsumableArray as toConsumableArray, _typeof as typeof, _unsupportedIterableToArray as unsupportedIterableToArray };\n","/**\n * Copyright IBM Corp. 2016, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport * as FeatureFlags from '@carbon/feature-flags';\n\nFeatureFlags.merge({\n 'enable-css-custom-properties': true,\n 'enable-css-grid': true,\n 'enable-v11-release': true\n});\n","/**\n * Copyright IBM Corp. 2016, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React__default from 'react';\n\nvar PrefixContext = /*#__PURE__*/React__default.createContext('cds');\nfunction usePrefix() {\n return React__default.useContext(PrefixContext);\n}\n\nexport { PrefixContext, usePrefix };\n","/**\n * Copyright IBM Corp. 2016, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { objectWithoutProperties as _objectWithoutProperties, defineProperty as _defineProperty, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';\nimport cx from 'classnames';\nimport { usePrefix } from '../../internal/usePrefix.js';\nimport PropTypes from 'prop-types';\nimport React__default from 'react';\nimport * as FeatureFlags from '@carbon/feature-flags';\n\nvar _excluded = [\"align\", \"children\", \"className\", \"disabled\", \"size\"];\n\nfunction Accordion(_ref) {\n var _cx;\n\n var _ref$align = _ref.align,\n align = _ref$align === void 0 ? 'end' : _ref$align,\n children = _ref.children,\n customClassName = _ref.className,\n _ref$disabled = _ref.disabled,\n disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n _ref$size = _ref.size,\n size = _ref$size === void 0 ? 'md' : _ref$size,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n var prefix = usePrefix();\n var className = cx(\"\".concat(prefix, \"--accordion\"), customClassName, (_cx = {}, _defineProperty(_cx, \"\".concat(prefix, \"--accordion--\").concat(align), align), _defineProperty(_cx, \"\".concat(prefix, \"--accordion--\").concat(size), size), _cx));\n return /*#__PURE__*/React__default.createElement(\"ul\", _extends({\n className: className\n }, rest), disabled ? React__default.Children.toArray(children).map(function (child) {\n return /*#__PURE__*/React__default.cloneElement(child, {\n disabled: disabled\n });\n }) : children);\n}\n\nAccordion.propTypes = {\n /**\n * Specify the alignment of the accordion heading title and chevron.\n */\n align: PropTypes.oneOf(['start', 'end']),\n\n /**\n * Pass in the children that will be rendered within the Accordion\n */\n children: PropTypes.node,\n\n /**\n * Specify an optional className to be applied to the container node\n */\n className: PropTypes.string,\n\n /**\n * Specify whether an individual AccordionItem should be disabled\n */\n disabled: PropTypes.bool,\n\n /**\n * Specify the size of the Accordion. Currently supports the following:\n */\n size: FeatureFlags.enabled('enable-v11-release') ? PropTypes.oneOf(['sm', 'md', 'lg']) : PropTypes.oneOf(['sm', 'md', 'lg', 'xl'])\n};\n\nexport { Accordion as default };\n","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nvar _excluded = [\"width\", \"height\", \"viewBox\"],\n _excluded2 = [\"tabindex\"];\n\n/**\n * Copyright IBM Corp. 2018, 2018\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar defaultAttributes = {\n // Reference:\n // https://github.com/IBM/carbon-components-react/issues/1392\n // https://github.com/PolymerElements/iron-iconset-svg/pull/47\n // `focusable` is a string attribute which is why we do not use a boolean here\n focusable: 'false',\n preserveAspectRatio: 'xMidYMid meet'\n};\n/**\n * Get supplementary HTML attributes for a given