Move segmentop tags into pspec

This commit is contained in:
caheckman 2021-09-16 13:53:46 -04:00
parent 00460b9c65
commit 74df84bed8
6 changed files with 58 additions and 23 deletions

View File

@ -167,7 +167,6 @@ void SegmentOp::restoreXml(const Element *el)
injectId = -1;
baseinsize = 0;
innerinsize = 0;
bool userdefined = false;
supportsfarpointer = false;
name = "segment"; // Default name, might be overridden by userop attribute
for(int4 i=0;i<el->getNumAttributes();++i) {
@ -177,19 +176,16 @@ void SegmentOp::restoreXml(const Element *el)
supportsfarpointer = true;
else if (nm == "userop") { // Based on existing sleigh op
name = el->getAttributeValue(i);
UserPcodeOp *otherop = glb->userops.getOp(name);
if (otherop != (UserPcodeOp *)0) {
userdefined = true;
useropindex = otherop->getIndex();
if (dynamic_cast<UnspecializedPcodeOp *>(otherop) == (UnspecializedPcodeOp *)0)
throw LowlevelError("Redefining userop "+name);
}
}
else
throw LowlevelError("Bad segmentop tag attribute: "+nm);
}
if (!userdefined)
throw LowlevelError("Missing userop attribute in segmentop tag");
UserPcodeOp *otherop = glb->userops.getOp(name);
if (otherop == (UserPcodeOp *)0)
throw LowlevelError("<segmentop> unknown userop " + name);
useropindex = otherop->getIndex();
if (dynamic_cast<UnspecializedPcodeOp *>(otherop) == (UnspecializedPcodeOp *)0)
throw LowlevelError("Redefining userop "+name);
const List &list(el->getChildren());
List::const_iterator iter;

View File

@ -3,6 +3,19 @@
<processor_spec>
<programcounter register="PC"/>
<segmentop space="ram" userop="segment" farpointer="yes">
<pcode>
<input name="base" size="2"/>
<input name="inner" size="2"/>
<output name="res" size="2"/>
<body><![CDATA[
res = (base << 12) + inner;
]]></body>
</pcode>
<constresolve>
<register name="rBBR"/>
</constresolve>
</segmentop>
<context_data>
<tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/>

View File

@ -1,6 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<processor_spec>
<segmentop space="ram" userop="segment" farpointer="yes">
<pcode>
<input name="base" size="2"/>
<input name="inner" size="2"/>
<output name="res" size="2"/>
<body><![CDATA[
res = (base << 12) + inner;
]]></body>
</pcode>
<constresolve>
<register name="rBBR"/>
</constresolve>
</segmentop>
<context_data>
<context_set space="ram">
<set name="assume8bitIOSpace" val="1"/>

View File

@ -9,19 +9,6 @@
<range space="io"/>
</global>
<stackpointer register="SP" space="ram"/>
<segmentop space="ram" userop="segment" farpointer="yes">
<pcode>
<input name="base" size="2"/>
<input name="inner" size="2"/>
<output name="res" size="2"/>
<body><![CDATA[
res = (base << 12) + inner;
]]></body>
</pcode>
<constresolve>
<register name="rBBR"/>
</constresolve>
</segmentop>
<default_proto>
<prototype name="__asmA" extrapop="2" stackshift="2" strategy="register">
<input>

View File

@ -3,6 +3,19 @@
<processor_spec>
<programcounter register="PC"/>
<segmentop space="ram" userop="segment" farpointer="yes">
<pcode>
<input name="base" size="2"/>
<input name="inner" size="2"/>
<output name="res" size="2"/>
<body><![CDATA[
res = (base << 12) + inner;
]]></body>
</pcode>
<constresolve>
<register name="rBBR"/>
</constresolve>
</segmentop>
<context_data>
<tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/>

View File

@ -3,6 +3,19 @@
<processor_spec>
<programcounter register="PC"/>
<segmentop space="ram" userop="segment" farpointer="yes">
<pcode>
<input name="base" size="2"/>
<input name="inner" size="2"/>
<output name="res" size="2"/>
<body><![CDATA[
res = (base << 12) + inner;
]]></body>
</pcode>
<constresolve>
<register name="rBBR"/>
</constresolve>
</segmentop>
<context_data>
<tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/>