Merge remote-tracking branch 'origin/patch'

This commit is contained in:
Ryan Kurtz 2021-09-17 07:18:16 -04:00
commit fdbb69e712
6 changed files with 58 additions and 23 deletions

View file

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

View file

@ -3,6 +3,19 @@
<processor_spec> <processor_spec>
<programcounter register="PC"/> <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> <context_data>
<tracked_set space="ram"> <tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/> <set name="DECOMPILE_MODE" val="1"/>

View file

@ -1,6 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<processor_spec> <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_data>
<context_set space="ram"> <context_set space="ram">
<set name="assume8bitIOSpace" val="1"/> <set name="assume8bitIOSpace" val="1"/>

View file

@ -9,19 +9,6 @@
<range space="io"/> <range space="io"/>
</global> </global>
<stackpointer register="SP" space="ram"/> <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> <default_proto>
<prototype name="__asmA" extrapop="2" stackshift="2" strategy="register"> <prototype name="__asmA" extrapop="2" stackshift="2" strategy="register">
<input> <input>

View file

@ -3,6 +3,19 @@
<processor_spec> <processor_spec>
<programcounter register="PC"/> <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> <context_data>
<tracked_set space="ram"> <tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/> <set name="DECOMPILE_MODE" val="1"/>

View file

@ -3,6 +3,19 @@
<processor_spec> <processor_spec>
<programcounter register="PC"/> <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> <context_data>
<tracked_set space="ram"> <tracked_set space="ram">
<set name="DECOMPILE_MODE" val="1"/> <set name="DECOMPILE_MODE" val="1"/>