added interns easter eggs, compiles now
This commit is contained in:
@@ -21,7 +21,6 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
|
|||||||
{ 0x04, 0x04 }, // MOR
|
{ 0x04, 0x04 }, // MOR
|
||||||
{ 0x00, 0x00 }, // AMOV
|
{ 0x00, 0x00 }, // AMOV
|
||||||
{ 0x04, 0x04 }, // SWP
|
{ 0x04, 0x04 }, // SWP
|
||||||
{ 0x04, 0x00 }, // AHM
|
|
||||||
{ 0xFF, 0x00 }, // COM
|
{ 0xFF, 0x00 }, // COM
|
||||||
{ 0xFF, 0x00 }, // NEG
|
{ 0xFF, 0x00 }, // NEG
|
||||||
{ 0xFF, 0x00 }, // EXS
|
{ 0xFF, 0x00 }, // EXS
|
||||||
@@ -37,7 +36,6 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
|
|||||||
{ 0x1E, 0xFF }, // UMOD
|
{ 0x1E, 0xFF }, // UMOD
|
||||||
{ 0x1E, 0xFF }, // DMOD
|
{ 0x1E, 0xFF }, // DMOD
|
||||||
{ 0x1E, 0xFF }, // UDMD
|
{ 0x1E, 0xFF }, // UDMD
|
||||||
{ 0xFF, 0x00 }, // FBT
|
|
||||||
{ 0x1E, 0xFF }, // STB
|
{ 0x1E, 0xFF }, // STB
|
||||||
{ 0x1E, 0xFF }, // CRB
|
{ 0x1E, 0xFF }, // CRB
|
||||||
{ 0x1E, 0xFF }, // TSB
|
{ 0x1E, 0xFF }, // TSB
|
||||||
@@ -139,6 +137,12 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
|
|||||||
{ 0x00, 0x00 }, // XMUL
|
{ 0x00, 0x00 }, // XMUL
|
||||||
{ 0x00, 0x00 }, // XDIV
|
{ 0x00, 0x00 }, // XDIV
|
||||||
{ 0x00, 0x00 }, // UPY
|
{ 0x00, 0x00 }, // UPY
|
||||||
|
{ 0x00, 0x00 }, // INT_1_SLOT
|
||||||
|
{ 0x00, 0x00 }, // INT_2_SLOT
|
||||||
|
{ 0x00, 0x00 }, // INT_3_SLOT
|
||||||
|
{ 0x00, 0x00 }, // INT_4_SLOT
|
||||||
|
{ 0x00, 0x00 }, // BRAD
|
||||||
|
{ 0x00, 0x00 }, // DGANT
|
||||||
};
|
};
|
||||||
|
|
||||||
// Type size masks — indexed by opcode.
|
// Type size masks — indexed by opcode.
|
||||||
@@ -157,7 +161,6 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
|
|||||||
0x08, // MOR
|
0x08, // MOR
|
||||||
0x08, // AMOV
|
0x08, // AMOV
|
||||||
0x08, // SWP
|
0x08, // SWP
|
||||||
0x08, // AHM
|
|
||||||
0x0F, // COM
|
0x0F, // COM
|
||||||
0x0F, // NEG
|
0x0F, // NEG
|
||||||
0x0F, // EXS
|
0x0F, // EXS
|
||||||
@@ -173,7 +176,6 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
|
|||||||
0x0F, // UMOD
|
0x0F, // UMOD
|
||||||
0x0F, // DMOD
|
0x0F, // DMOD
|
||||||
0x0F, // UDMD
|
0x0F, // UDMD
|
||||||
0x0F, // FBT
|
|
||||||
0x0F, // STB
|
0x0F, // STB
|
||||||
0x0F, // CRB
|
0x0F, // CRB
|
||||||
0x0F, // TSB
|
0x0F, // TSB
|
||||||
@@ -275,6 +277,12 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
|
|||||||
0x00, // XMUL
|
0x00, // XMUL
|
||||||
0x00, // XDIV
|
0x00, // XDIV
|
||||||
0x00, // UPY
|
0x00, // UPY
|
||||||
|
0x00, // INT_1_SLOT
|
||||||
|
0x00, // INT_2_SLOT
|
||||||
|
0x00, // INT_3_SLOT
|
||||||
|
0x00, // INT_4_SLOT
|
||||||
|
0x00, // BRAD
|
||||||
|
0x00, // DGANT
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace spider
|
} // namespace spider
|
||||||
Binary file not shown.
@@ -1,8 +1,10 @@
|
|||||||
#Compiler and Linker
|
#Compiler, Archiver and Linker
|
||||||
CC := g++
|
CC := g++
|
||||||
|
AR := ar
|
||||||
|
ARFLAGS := rcs
|
||||||
|
|
||||||
#The Target Binary Program
|
# The Target Static Library
|
||||||
TARGET := out.exe
|
TARGET := libspider-runtimelib.a
|
||||||
|
|
||||||
#The Directories, Source, Includes, Objects, Binary and Resources
|
#The Directories, Source, Includes, Objects, Binary and Resources
|
||||||
SRCDIR := src
|
SRCDIR := src
|
||||||
@@ -22,42 +24,36 @@ CFLAGS := -std=c++20 -O2 \
|
|||||||
-Wformat=2 -Wimplicit-fallthrough -Wsuggest-override \
|
-Wformat=2 -Wimplicit-fallthrough -Wsuggest-override \
|
||||||
-Wextra-semi -Wduplicated-cond -Wduplicated-branches \
|
-Wextra-semi -Wduplicated-cond -Wduplicated-branches \
|
||||||
-Wlogical-op -Wuseless-cast
|
-Wlogical-op -Wuseless-cast
|
||||||
LFLAGS := -std=c++20 -static-libstdc++ -static-libgcc \
|
|
||||||
-Wl,--fatal-warnings -Wl,--warn-common
|
|
||||||
LIB :=
|
|
||||||
INC := -I./src/
|
INC := -I./src/
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
#DO NOT EDIT BELOW THIS LINE
|
#DO NOT EDIT BELOW THIS LINE
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
|
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
|
||||||
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT)))
|
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT)))
|
||||||
|
|
||||||
#Defauilt Make
|
#Default Make
|
||||||
all: directories $(TARGET)
|
all: directories $(TARGET)
|
||||||
|
|
||||||
#Remake
|
#Remake
|
||||||
remake: cleaner all
|
remake: clean all
|
||||||
|
|
||||||
#Make the Directories
|
#Make the Directories
|
||||||
directories:
|
directories:
|
||||||
@mkdir -p $(TARGETDIR)
|
@mkdir -p $(TARGETDIR)
|
||||||
@mkdir -p $(BUILDDIR)
|
@mkdir -p $(BUILDDIR)
|
||||||
|
|
||||||
#Clean only Objecst
|
#Clean only Objects
|
||||||
clean:
|
clean:
|
||||||
@$(RM) -rf $(BUILDDIR)
|
@$(RM) -rf $(BUILDDIR)
|
||||||
|
|
||||||
#Full Clean, Objects and Binaries
|
|
||||||
cleaner: clean
|
|
||||||
@$(RM) -rf $(TARGETDIR)
|
|
||||||
|
|
||||||
#Pull in dependency info for *existing* .o files
|
#Pull in dependency info for *existing* .o files
|
||||||
-include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT))
|
-include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT))
|
||||||
|
|
||||||
#Link
|
#Create Static Library (Archive)
|
||||||
$(TARGET): $(OBJECTS)
|
$(TARGET): $(OBJECTS)
|
||||||
$(CC) $(LFLAGS) -o $(TARGETDIR)/$(TARGET) $^ $(LIB)
|
$(AR) $(ARFLAGS) $(TARGETDIR)/$(TARGET) $^
|
||||||
|
|
||||||
#Compile
|
#Compile
|
||||||
$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
|
$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
|
||||||
@@ -70,4 +66,4 @@ $(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
|
|||||||
@rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp
|
@rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp
|
||||||
|
|
||||||
#Non-File Targets
|
#Non-File Targets
|
||||||
.PHONY: all remake clean cleaner resources
|
.PHONY: all remake clean
|
||||||
|
|||||||
+360
-15
@@ -144,7 +144,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 3,
|
"execution_count": 4,
|
||||||
"id": "58645013",
|
"id": "58645013",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -152,26 +152,26 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"Real instructions : 132\n",
|
"Real instructions : 136\n",
|
||||||
"Reserved slots : 10\n",
|
"Reserved slots : 12\n",
|
||||||
"Duplicate check : PASSED\n",
|
"Duplicate check : PASSED\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Groups found:\n",
|
"Groups found:\n",
|
||||||
"group\n",
|
"group\n",
|
||||||
"Integer 19\n",
|
"Integer 19\n",
|
||||||
"Boolean 16\n",
|
"Boolean 16\n",
|
||||||
"System 15\n",
|
|
||||||
"Bit Wise 14\n",
|
"Bit Wise 14\n",
|
||||||
|
"System 14\n",
|
||||||
"Branch 12\n",
|
"Branch 12\n",
|
||||||
"Floating Point 10\n",
|
"Floating Point 10\n",
|
||||||
"Casts 10\n",
|
"Casts 10\n",
|
||||||
"Memory 9\n",
|
"Memory 8\n",
|
||||||
"Trigonometric 7\n",
|
"Trigonometric 7\n",
|
||||||
|
"Easter Eggs 7\n",
|
||||||
"Exponential 6\n",
|
"Exponential 6\n",
|
||||||
"Matrix 6\n",
|
"Matrix 6\n",
|
||||||
"SIMD 5\n",
|
"SIMD 5\n",
|
||||||
"Quaternion 2\n",
|
"Quaternion 2\n",
|
||||||
"Easter Eggs 1\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"First 5 instructions:\n",
|
"First 5 instructions:\n",
|
||||||
" byte_code mnemonic group params addr_mask_1 type_mask\n",
|
" byte_code mnemonic group params addr_mask_1 type_mask\n",
|
||||||
@@ -283,7 +283,352 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 4,
|
"execution_count": 5,
|
||||||
|
"id": "ac8bb791",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<div>\n",
|
||||||
|
"<style scoped>\n",
|
||||||
|
" .dataframe tbody tr th:only-of-type {\n",
|
||||||
|
" vertical-align: middle;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe tbody tr th {\n",
|
||||||
|
" vertical-align: top;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe thead th {\n",
|
||||||
|
" text-align: right;\n",
|
||||||
|
" }\n",
|
||||||
|
"</style>\n",
|
||||||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||||||
|
" <thead>\n",
|
||||||
|
" <tr style=\"text-align: right;\">\n",
|
||||||
|
" <th></th>\n",
|
||||||
|
" <th>skip_0</th>\n",
|
||||||
|
" <th>skip_1</th>\n",
|
||||||
|
" <th>byte_code</th>\n",
|
||||||
|
" <th>mnemonic</th>\n",
|
||||||
|
" <th>name</th>\n",
|
||||||
|
" <th>group</th>\n",
|
||||||
|
" <th>params</th>\n",
|
||||||
|
" <th>imp</th>\n",
|
||||||
|
" <th>imm</th>\n",
|
||||||
|
" <th>abs</th>\n",
|
||||||
|
" <th>...</th>\n",
|
||||||
|
" <th>B</th>\n",
|
||||||
|
" <th>S</th>\n",
|
||||||
|
" <th>I</th>\n",
|
||||||
|
" <th>L</th>\n",
|
||||||
|
" <th>F</th>\n",
|
||||||
|
" <th>D</th>\n",
|
||||||
|
" <th>type_mask</th>\n",
|
||||||
|
" <th>expensive</th>\n",
|
||||||
|
" <th>operation</th>\n",
|
||||||
|
" <th>skip_2</th>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </thead>\n",
|
||||||
|
" <tbody>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>140</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>08C</td>\n",
|
||||||
|
" <td>XAMA</td>\n",
|
||||||
|
" <td>SIMD Alternate Multiply-Add</td>\n",
|
||||||
|
" <td>SIMD</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>141</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>08D</td>\n",
|
||||||
|
" <td>XMUL</td>\n",
|
||||||
|
" <td>SIMD Multiply</td>\n",
|
||||||
|
" <td>SIMD</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>142</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>08E</td>\n",
|
||||||
|
" <td>XDIV</td>\n",
|
||||||
|
" <td>SIMD Divide</td>\n",
|
||||||
|
" <td>SIMD</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>240</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0F0</td>\n",
|
||||||
|
" <td>UPY</td>\n",
|
||||||
|
" <td>Will place \"YUPI\" in memory</td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>241</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F1</td>\n",
|
||||||
|
" <td>INT_1_SLOT</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>242</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F2</td>\n",
|
||||||
|
" <td>INT_2_SLOT</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>243</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F3</td>\n",
|
||||||
|
" <td>INT_3_SLOT</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>244</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F4</td>\n",
|
||||||
|
" <td>INT_4_SLOT</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>245</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F5</td>\n",
|
||||||
|
" <td>BRAD</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>246</th>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td>0F6</td>\n",
|
||||||
|
" <td>DGANT</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>Easter Eggs</td>\n",
|
||||||
|
" <td>0</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>...</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>X</td>\n",
|
||||||
|
" <td>00</td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" <td></td>\n",
|
||||||
|
" <td>NaN</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </tbody>\n",
|
||||||
|
"</table>\n",
|
||||||
|
"<p>10 rows × 29 columns</p>\n",
|
||||||
|
"</div>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
" skip_0 skip_1 byte_code mnemonic name \\\n",
|
||||||
|
"140 NaN NaN 08C XAMA SIMD Alternate Multiply-Add \n",
|
||||||
|
"141 NaN NaN 08D XMUL SIMD Multiply \n",
|
||||||
|
"142 NaN NaN 08E XDIV SIMD Divide \n",
|
||||||
|
"240 NaN Easter Eggs 0F0 UPY Will place \"YUPI\" in memory \n",
|
||||||
|
"241 NaN NaN 0F1 INT_1_SLOT \n",
|
||||||
|
"242 NaN NaN 0F2 INT_2_SLOT \n",
|
||||||
|
"243 NaN NaN 0F3 INT_3_SLOT \n",
|
||||||
|
"244 NaN NaN 0F4 INT_4_SLOT \n",
|
||||||
|
"245 NaN NaN 0F5 BRAD \n",
|
||||||
|
"246 NaN NaN 0F6 DGANT \n",
|
||||||
|
"\n",
|
||||||
|
" group params imp imm abs ... B S I L F D type_mask \\\n",
|
||||||
|
"140 SIMD 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"141 SIMD 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"142 SIMD 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"240 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"241 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"242 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"243 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"244 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"245 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"246 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
|
||||||
|
"\n",
|
||||||
|
" expensive operation skip_2 \n",
|
||||||
|
"140 NaN NaN \n",
|
||||||
|
"141 NaN NaN \n",
|
||||||
|
"142 NaN NaN \n",
|
||||||
|
"240 NaN NaN \n",
|
||||||
|
"241 NaN NaN \n",
|
||||||
|
"242 NaN NaN \n",
|
||||||
|
"243 NaN NaN \n",
|
||||||
|
"244 NaN NaN \n",
|
||||||
|
"245 NaN NaN \n",
|
||||||
|
"246 NaN NaN \n",
|
||||||
|
"\n",
|
||||||
|
"[10 rows x 29 columns]"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"instrs_df.tail(10)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 6,
|
||||||
"id": "452bc76c",
|
"id": "452bc76c",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -292,7 +637,7 @@
|
|||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"Masks written to: .//autogen/InstructionMasks.hpp\n",
|
"Masks written to: .//autogen/InstructionMasks.hpp\n",
|
||||||
"Lines generated : 280\n"
|
"Lines generated : 288\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -357,7 +702,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 5,
|
"execution_count": 7,
|
||||||
"id": "5aaebef0",
|
"id": "5aaebef0",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -365,7 +710,7 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"Instructions formatted: 132\n",
|
"Instructions formatted: 136\n",
|
||||||
"\n",
|
"\n",
|
||||||
"--- Preview (first 2 instructions) ---\n",
|
"--- Preview (first 2 instructions) ---\n",
|
||||||
" // [System] 0x000 — NOP: No Operation\n",
|
" // [System] 0x000 — NOP: No Operation\n",
|
||||||
@@ -380,7 +725,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"CPU.hpp updated successfully at: .//src//spider/runtime/cpu/CPU.hpp\n",
|
"CPU.hpp updated successfully at: .//src//spider/runtime/cpu/CPU.hpp\n",
|
||||||
"Total lines in updated file: 911\n"
|
"Total lines in updated file: 942\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -460,9 +805,9 @@
|
|||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"InstrMap.cpp written to: .//src//spider/runtime/instr/InstrMap.cpp\n",
|
"InstrMap.cpp written to: .//src//spider/runtime/instr/InstrMap.cpp\n",
|
||||||
" Size : 33,581 bytes\n",
|
" Size : 33,582 bytes\n",
|
||||||
" Array entries : 512 (132 populated, 380 nullptr)\n",
|
" Array entries : 512 (136 populated, 376 nullptr)\n",
|
||||||
" Switch cases : 132\n",
|
" Switch cases : 136\n",
|
||||||
" Line endings : LF-only verified\n"
|
" Line endings : LF-only verified\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -618,7 +963,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 12,
|
"execution_count": 9,
|
||||||
"id": "9f190f4c",
|
"id": "9f190f4c",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
|||||||
@@ -325,11 +325,6 @@ namespace spider {
|
|||||||
// Operation: Src <-> Dst
|
// Operation: Src <-> Dst
|
||||||
void SWP();
|
void SWP();
|
||||||
|
|
||||||
// [Memory] 0x00E — AHM: Ask Host for Memory
|
|
||||||
// Params: 1 | AddrMask1: 04 AddrMask2: 00 | TypeMask: 08
|
|
||||||
// Operation: Asks the host for a specific size of memory. Responds with 0 or 1
|
|
||||||
void AHM();
|
|
||||||
|
|
||||||
// [Integer] 0x010 — COM: One's complement
|
// [Integer] 0x010 — COM: One's complement
|
||||||
// Params: 1 | AddrMask1: FF AddrMask2: 00 | TypeMask: 0F
|
// Params: 1 | AddrMask1: FF AddrMask2: 00 | TypeMask: 0F
|
||||||
// Operation: ~ Dst -> Dst
|
// Operation: ~ Dst -> Dst
|
||||||
@@ -405,11 +400,6 @@ namespace spider {
|
|||||||
// Operation: Unsigned Dst / Src -> X, Dst % Src -> Y
|
// Operation: Unsigned Dst / Src -> X, Dst % Src -> Y
|
||||||
void UDMD();
|
void UDMD();
|
||||||
|
|
||||||
// [System] 0x01F — FBT: Test and update Flag Register (Integer) Bits
|
|
||||||
// Params: 1 | AddrMask1: FF AddrMask2: 00 | TypeMask: 0F
|
|
||||||
// Operation: Flags of Dst -
|
|
||||||
void FBT();
|
|
||||||
|
|
||||||
// [Bit Wise] 0x020 — STB: Set Bit
|
// [Bit Wise] 0x020 — STB: Set Bit
|
||||||
// Params: 2 | AddrMask1: 1E AddrMask2: FF | TypeMask: 0F
|
// Params: 2 | AddrMask1: 1E AddrMask2: FF | TypeMask: 0F
|
||||||
// Operation: Src# bit is set on Dst
|
// Operation: Src# bit is set on Dst
|
||||||
@@ -915,6 +905,36 @@ namespace spider {
|
|||||||
// Operation:
|
// Operation:
|
||||||
void UPY();
|
void UPY();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F1 — INT_1_SLOT:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void INT_1_SLOT();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F2 — INT_2_SLOT:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void INT_2_SLOT();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F3 — INT_3_SLOT:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void INT_3_SLOT();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F4 — INT_4_SLOT:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void INT_4_SLOT();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F5 — BRAD:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void BRAD();
|
||||||
|
|
||||||
|
// [Easter Eggs] 0x0F6 — DGANT:
|
||||||
|
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
|
||||||
|
// Operation:
|
||||||
|
void DGANT();
|
||||||
|
|
||||||
// </pygen-target> //
|
// </pygen-target> //
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ CPU::Fn CPU::instrMap[] = {
|
|||||||
&CPU::MOR, // 0x00B — Moves registers
|
&CPU::MOR, // 0x00B — Moves registers
|
||||||
&CPU::AMOV, // 0x00C — Array Move, uses X and Y as ptrs, A as amount
|
&CPU::AMOV, // 0x00C — Array Move, uses X and Y as ptrs, A as amount
|
||||||
&CPU::SWP, // 0x00D — Swap registers
|
&CPU::SWP, // 0x00D — Swap registers
|
||||||
&CPU::AHM, // 0x00E — Ask Host for Memory
|
nullptr, // 0x00E (reserved)
|
||||||
nullptr, // 0x00F (reserved)
|
nullptr, // 0x00F (reserved)
|
||||||
&CPU::COM, // 0x010 — One's complement
|
&CPU::COM, // 0x010 — One's complement
|
||||||
&CPU::NEG, // 0x011 — Two's complement
|
&CPU::NEG, // 0x011 — Two's complement
|
||||||
@@ -66,7 +66,7 @@ CPU::Fn CPU::instrMap[] = {
|
|||||||
&CPU::UMOD, // 0x01C — Unsigned Modulus
|
&CPU::UMOD, // 0x01C — Unsigned Modulus
|
||||||
&CPU::DMOD, // 0x01D — Division and Modulus
|
&CPU::DMOD, // 0x01D — Division and Modulus
|
||||||
&CPU::UDMD, // 0x01E — Unsigned Division and Modulus
|
&CPU::UDMD, // 0x01E — Unsigned Division and Modulus
|
||||||
&CPU::FBT, // 0x01F — Test and update Flag Register (Integer) Bits
|
nullptr, // 0x01F (reserved)
|
||||||
&CPU::STB, // 0x020 — Set Bit
|
&CPU::STB, // 0x020 — Set Bit
|
||||||
&CPU::CRB, // 0x021 — Clear Bit
|
&CPU::CRB, // 0x021 — Clear Bit
|
||||||
&CPU::TSB, // 0x022 — Test Bit
|
&CPU::TSB, // 0x022 — Test Bit
|
||||||
@@ -276,12 +276,12 @@ CPU::Fn CPU::instrMap[] = {
|
|||||||
nullptr, // 0x0EE
|
nullptr, // 0x0EE
|
||||||
nullptr, // 0x0EF
|
nullptr, // 0x0EF
|
||||||
&CPU::UPY, // 0x0F0 — Will place "YUPI" in memory
|
&CPU::UPY, // 0x0F0 — Will place "YUPI" in memory
|
||||||
nullptr, // 0x0F1
|
&CPU::INT_1_SLOT, // 0x0F1 —
|
||||||
nullptr, // 0x0F2
|
&CPU::INT_2_SLOT, // 0x0F2 —
|
||||||
nullptr, // 0x0F3
|
&CPU::INT_3_SLOT, // 0x0F3 —
|
||||||
nullptr, // 0x0F4
|
&CPU::INT_4_SLOT, // 0x0F4 —
|
||||||
nullptr, // 0x0F5
|
&CPU::BRAD, // 0x0F5 —
|
||||||
nullptr, // 0x0F6
|
&CPU::DGANT, // 0x0F6 —
|
||||||
nullptr, // 0x0F7
|
nullptr, // 0x0F7
|
||||||
nullptr, // 0x0F8
|
nullptr, // 0x0F8
|
||||||
nullptr, // 0x0F9
|
nullptr, // 0x0F9
|
||||||
@@ -583,7 +583,6 @@ void CPU::executeSwLk() {
|
|||||||
case 0x00B: MOR(); break;
|
case 0x00B: MOR(); break;
|
||||||
case 0x00C: AMOV(); break;
|
case 0x00C: AMOV(); break;
|
||||||
case 0x00D: SWP(); break;
|
case 0x00D: SWP(); break;
|
||||||
case 0x00E: AHM(); break;
|
|
||||||
|
|
||||||
// ── Integer ─────────────────────────────────────
|
// ── Integer ─────────────────────────────────────
|
||||||
case 0x010: COM(); break;
|
case 0x010: COM(); break;
|
||||||
@@ -602,9 +601,6 @@ void CPU::executeSwLk() {
|
|||||||
case 0x01D: DMOD(); break;
|
case 0x01D: DMOD(); break;
|
||||||
case 0x01E: UDMD(); break;
|
case 0x01E: UDMD(); break;
|
||||||
|
|
||||||
// ── System ──────────────────────────────────────
|
|
||||||
case 0x01F: FBT(); break;
|
|
||||||
|
|
||||||
// ── Bit Wise ────────────────────────────────────
|
// ── Bit Wise ────────────────────────────────────
|
||||||
case 0x020: STB(); break;
|
case 0x020: STB(); break;
|
||||||
case 0x021: CRB(); break;
|
case 0x021: CRB(); break;
|
||||||
@@ -741,6 +737,12 @@ void CPU::executeSwLk() {
|
|||||||
|
|
||||||
// ── Easter Eggs ─────────────────────────────────
|
// ── Easter Eggs ─────────────────────────────────
|
||||||
case 0x0F0: UPY(); break;
|
case 0x0F0: UPY(); break;
|
||||||
|
case 0x0F1: INT_1_SLOT(); break;
|
||||||
|
case 0x0F2: INT_2_SLOT(); break;
|
||||||
|
case 0x0F3: INT_3_SLOT(); break;
|
||||||
|
case 0x0F4: INT_4_SLOT(); break;
|
||||||
|
case 0x0F5: BRAD(); break;
|
||||||
|
case 0x0F6: DGANT(); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -402,21 +402,8 @@ namespace spider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CPU::FBT() {
|
void CPU::FBT() {
|
||||||
fetchOperDst();
|
fetchOperReg();
|
||||||
switch (_size) {
|
RF = _dst->_u64; // TODO: Mask accepted flags
|
||||||
case 0b00: //byte
|
|
||||||
RF = u8((RF & ~(0x3 << 9))) | ((_dst->_u8 >> 9) & 0x3) << 9;
|
|
||||||
break;
|
|
||||||
case 0b01: //short
|
|
||||||
RF = u16((RF & ~(0x3 << 9))) | ((_dst->_u16 >> 9) & 0x3) << 9;
|
|
||||||
break;
|
|
||||||
case 0b10: //int
|
|
||||||
RF = u32((RF & ~(0x3 << 9))) | ((_dst->_u32 >> 9) & 0x3) << 9;
|
|
||||||
break;
|
|
||||||
case 0b11: //long
|
|
||||||
RF = u64((RF & ~(0x3 << 9))) | ((_dst->_u64 >> 9) & 0x3) << 9;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
namespace spider {
|
namespace spider {
|
||||||
|
|
||||||
void CPU::STB() {
|
void CPU::STB() {
|
||||||
// TODO: Implement STB
|
|
||||||
fetchOperSrc();
|
fetchOperSrc();
|
||||||
fetchOperDst();
|
fetchOperDst();
|
||||||
switch(_size){
|
switch(_size){
|
||||||
@@ -28,92 +27,66 @@ namespace spider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CPU::CRB() {
|
void CPU::CRB() {
|
||||||
// TODO: Implement CRB
|
|
||||||
fetchOperSrc();
|
fetchOperSrc();
|
||||||
fetchOperDst();
|
fetchOperDst();
|
||||||
switch(_size){
|
switch(_size){
|
||||||
case 0b00: //byte
|
case 0b00: //byte
|
||||||
_dst->_u8 &= ~(1 << _src->_u8);
|
_dst->_u8 &= u8(~(u8(1) << _src->_u8));
|
||||||
break;
|
break;
|
||||||
case 0b01: //short
|
case 0b01: //short
|
||||||
_dst->_u16 &= ~(1 << _src->_u16);
|
_dst->_u16 &= u16(~(u16(1) << _src->_u16));
|
||||||
break;
|
break;
|
||||||
case 0b10: //int
|
case 0b10: //int
|
||||||
_dst->_u32 &= ~(1 << _src->_u32);
|
_dst->_u32 &= ~(u32(1) << _src->_u32);
|
||||||
break;
|
break;
|
||||||
case 0b11: //long
|
case 0b11: //long
|
||||||
_dst->_u64 &= ~(1 << _src->_u64);
|
_dst->_u64 &= ~(u64(1) << _src->_u64);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPU::TSB() {
|
void CPU::TSB() {
|
||||||
// TODO: Implement TSB
|
|
||||||
fetchOperSrc();
|
fetchOperSrc();
|
||||||
fetchOperDst();
|
fetchOperDst();
|
||||||
switch(_size){
|
|
||||||
case 0b00: //byte
|
|
||||||
switch (((RF >> _src->_u8) & 1) != ((_dst->_u8 >> _src->_u8) & 1)){
|
|
||||||
case 1:
|
|
||||||
RF |= (1 << _src->_u8);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
u64 s, d;
|
||||||
RF &= ~(1 << _src->_u8);
|
switch(_size) {
|
||||||
|
case 0b00: // byte
|
||||||
|
s = _src->_u8;
|
||||||
|
d = _dst->_u8;
|
||||||
|
break;
|
||||||
|
case 0b01: // short
|
||||||
|
s = _src->_u16;
|
||||||
|
d = _dst->_u16;
|
||||||
|
break;
|
||||||
|
case 0b10: // int
|
||||||
|
s = _src->_u32;
|
||||||
|
d = _dst->_u32;
|
||||||
|
break;
|
||||||
|
case 0b11: // long
|
||||||
|
s = _src->_u64;
|
||||||
|
d = _dst->_u64;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case 0b01: //short
|
|
||||||
switch (((RF >> _src->_u16) & 1) != ((_dst->_u16 >> _src->_u16) & 1)){
|
|
||||||
case 1:
|
|
||||||
RF |= (1 << _src->_u16);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
d >>= s;
|
||||||
RF &= ~(1 << _src->_u16);
|
d &= 1;
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0b10: //int
|
|
||||||
switch (((RF >> _src->_u32) & 1) != ((_dst->_u32 >> _src->_u32) & 1)){
|
|
||||||
case 1:
|
|
||||||
RF |= (1 << _src->_u32);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
RF &= ~(1 << _src->_u32);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0b11: //long
|
|
||||||
switch (((RF >> _src->_u64) & 1) != ((_dst->_u64 >> _src->_u64) & 1)){
|
|
||||||
case 1:
|
|
||||||
RF |= (1 << _src->_u64);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
RF &= ~(1 << _src->_u64);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPU::BOOL() {
|
void CPU::BOOL() {
|
||||||
// TODO: Implement BOOL
|
|
||||||
fetchOperDst();
|
fetchOperDst();
|
||||||
switch(_size){
|
switch(_size){
|
||||||
case 0b00: //byte
|
case 0b00: // byte
|
||||||
_dst->_u8 = _dst != 0;
|
_dst->_u8 = _dst->_u8 != 0;
|
||||||
break;
|
break;
|
||||||
case 0b01: //short
|
case 0b01: // short
|
||||||
_dst->_u16 = _dst != 0;
|
_dst->_u16 = _dst->_u16 != 0;
|
||||||
break;
|
break;
|
||||||
case 0b10: //int
|
case 0b10: // int
|
||||||
_dst->_u32 = _dst != 0;
|
_dst->_u32 = _dst->_u32 != 0;
|
||||||
break;
|
break;
|
||||||
case 0b11: //long
|
case 0b11: // long
|
||||||
_dst->_u64 = _dst != 0;
|
_dst->_u64 = _dst->_u64 != 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,11 +211,11 @@ namespace spider {
|
|||||||
// ── 0x02D — CNT: Counts bits (# of 1's into Dst) ──
|
// ── 0x02D — CNT: Counts bits (# of 1's into Dst) ──
|
||||||
void CPU::CNT() {
|
void CPU::CNT() {
|
||||||
fetchOperDst();
|
fetchOperDst();
|
||||||
switch(_size) {
|
switch(_size) { // C++20 cross compatible version!!
|
||||||
case 0b00: _dst->_u8 = __builtin_popcount(_dst->_u8); break;
|
case 0b00: _dst->_u8 = u8( std::popcount(_dst->_u8) ); break;
|
||||||
case 0b01: _dst->_u16 = __builtin_popcount(_dst->_u16); break;
|
case 0b01: _dst->_u16 = u16(std::popcount(_dst->_u16)); break;
|
||||||
case 0b10: _dst->_u32 = __builtin_popcount(_dst->_u32); break;
|
case 0b10: _dst->_u32 = u32(std::popcount(_dst->_u32)); break;
|
||||||
case 0b11: _dst->_u64 = __builtin_popcountll(_dst->_u64); break;
|
case 0b11: _dst->_u64 = u64(std::popcount(_dst->_u64)); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace spider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief BRAD (0xF7) - Memory Integrity Checksum
|
* @brief BRAD (0xF5) - Memory Integrity Checksum
|
||||||
* Escanea los primeros 256 bytes de memoria y valida contra una firma de seguridad.
|
* Escanea los primeros 256 bytes de memoria y valida contra una firma de seguridad.
|
||||||
* Implementado por Bradley Vergara Lara - Estancia 2026.
|
* Implementado por Bradley Vergara Lara - Estancia 2026.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user