strings y extasp

This commit is contained in:
Gabriel Lorenzo 2003-05-26 12:12:29 +00:00
parent 14d854c6e4
commit 6f239e1691
8 changed files with 76 additions and 44 deletions

View file

@ -1,3 +1,10 @@
26/5/2003
---------
* Ya están comprobados todos los nuevos opcodes de string, parece ke
rulan bien :) Encontré un bug en el opcode optimizado caraidcpa,
ya está arreglado. (Er_Makina)
* Añadido el opcode extasp (optimización de ext + asp). (Er_Makina)
25/5/2003 25/5/2003
--------- ---------
* Añadido soporte para datos STRING. Aún quedan por comprobar algunos * Añadido soporte para datos STRING. Aún quedan por comprobar algunos

View file

@ -833,6 +833,9 @@ void gen(int param, int op, int pa)
} else if (code[15].op==lfun) { } else if (code[15].op==lfun) {
code[15].op=mem[imem-2]=lfunasp; code[15].op=mem[imem-2]=lfunasp;
optimizado=1; optimizado=1;
} else if (code[15].op==lext) {
code[15].op=mem[imem-2]=lextasp;
optimizado=1;
} break; } break;
case laid: case laid:
if (code[15].op==lcar) { if (code[15].op==lcar) {

View file

@ -111,7 +111,7 @@ int case_sensitive;
#define lrng 22 /* rango Realiza una comparación de rango */ #define lrng 22 /* rango Realiza una comparación de rango */
#define ljmp 23 /* offset Salta a una dirección de mem[] */ #define ljmp 23 /* offset Salta a una dirección de mem[] */
#define ljpf 24 /* offset Salta si un valor es falso a una dirección */ #define ljpf 24 /* offset Salta si un valor es falso a una dirección */
#define lfun 25 /* código Llamada a un proceso interno, ej. signal() */ #define lfun 25 /* código Llamada a un proceso interno, ej. signal() (obsoleto, ver lext) */
#define lcal 26 /* offset Crea un nuevo proceso en el programa */ #define lcal 26 /* offset Crea un nuevo proceso en el programa */
#define lret 27 /* Auto-eliminación del proceso */ #define lret 27 /* Auto-eliminación del proceso */
#define lasp 28 /* Desecha un valor apilado */ #define lasp 28 /* Desecha un valor apilado */
@ -148,24 +148,24 @@ int case_sensitive;
#define ldbg 59 /* Invoca al debugger */ #define ldbg 59 /* Invoca al debugger */
/* Instrucciones añadidas para la optimización (DIV 2.0) */ /* Instrucciones añadidas para la optimización (DIV 2.0) */
#define lcar2 60 #define lcar2 60 /* car + car */
#define lcar3 61 #define lcar3 61 /* car + car + car */
#define lcar4 62 #define lcar4 62 /* car + car + car + car */
#define lasiasp 63 #define lasiasp 63 /* asi + asp */
#define lcaraid 64 #define lcaraid 64 /* car + aid */
#define lcarptr 65 #define lcarptr 65 /* car + ptr */
#define laidptr 66 #define laidptr 66 /* aid + ptr */
#define lcaraidptr 67 #define lcaraidptr 67 /* car + aid + ptr */
#define lcaraidcpa 68 #define lcaraidcpa 68 /* car + aid + cpa */
#define laddptr 69 #define laddptr 69 /* add + ptr */
#define lfunasp 70 #define lfunasp 70 /* fun + asp (obsoleto, ver lextasp) */
#define lcaradd 71 #define lcaradd 71 /* car + add */
#define lcaraddptr 72 #define lcaraddptr 72 /* car + add + ptr */
#define lcarmul 73 #define lcarmul 73 /* car + mul */
#define lcarmuladd 74 #define lcarmuladd 74 /* car + mul + add */
#define lcarasiasp 75 #define lcarasiasp 75 /* car + asi + asp */
#define lcarsub 76 #define lcarsub 76 /* car + sub */
#define lcardiv 77 #define lcardiv 77 /* car + div */
/* Instrucciones añadidas para el manejo de caracteres */ /* Instrucciones añadidas para el manejo de caracteres */
#define lptrchr 78 /* Pointer, saca (index, offset) y mete [offset+byte index] */ #define lptrchr 78 /* Pointer, saca (index, offset) y mete [offset+byte index] */
@ -224,6 +224,9 @@ int case_sensitive;
/* Miscelánea */ /* Miscelánea */
#define lnul 126 /* Comprueba que un puntero no sea NULL */ #define lnul 126 /* Comprueba que un puntero no sea NULL */
/* Instrucciones añadidas en eDIV */
#define lextasp 127 /* Combinación de ext y asp, sustituye a funasp */
struct { /* Peephole, "mirilla" para el optimizador */ struct { /* Peephole, "mirilla" para el optimizador */
int dir; /* Dirección */ int dir; /* Dirección */

View file

@ -355,6 +355,10 @@ void listado_ensamblador (void)
case lstrmai: fprintf(sta,"%5u\tstrmai",i); break; case lstrmai: fprintf(sta,"%5u\tstrmai",i); break;
case lcpastr: fprintf(sta,"%5u\tcpastr",i); break; case lcpastr: fprintf(sta,"%5u\tcpastr",i); break;
case lnul: fprintf(sta,"%5u\tnul",i); break;
case lextasp: fprintf(sta,"%5u\textasp %u",i,mem[i+1]); i++; break;
default: fprintf(sta,"***"); break; default: fprintf(sta,"***"); break;
} fprintf(sta,"\n"); i++; } } fprintf(sta,"\n"); i++; }
fclose (sta); fclose (sta);

View file

@ -523,7 +523,10 @@ int proceso( int num, int padre )
break; break;
case lcaraidcpa://68 case lcaraidcpa://68
mem[mem[imem++]+procs_s[num_proc].id]=pila[reserved("param_offset",procs_s[num_proc].id)++]; mem[mem[imem++]+procs_s[num_proc].id]=pila[reserved("param_offset",procs_s[num_proc].id)++];
sp--; //sp--;
cpas++;
if(cpas==reserved("parameters",procs_s[num_proc].id))
sp-=cpas;
break; break;
case laddptr://69 case laddptr://69
pila[sp-1]=mem[pila[sp-1]+pila[sp]]; pila[sp-1]=mem[pila[sp-1]+pila[sp]];
@ -1009,6 +1012,17 @@ int proceso( int num, int padre )
} }
#endif*/ #endif*/
break; break;
/* OPCODES NUEVOS DE EDIV */
case lextasp:
externa=extfuncs[mem[imem]];
// corresponder con FUNCTION_PARAMS
//temp = externa(pila,&sp,mem,varindex,&procs_s,Call_Entrypoint);
fp.num_params=extparms[mem[imem++]];
externa(&fp);
break;
} }
#ifdef DBG #ifdef DBG

View file

@ -63,7 +63,7 @@
#define lrng 22 // rango Realiza una comparación de rango #define lrng 22 // rango Realiza una comparación de rango
#define ljmp 23 // offset Salta a una dirección de mem[] #define ljmp 23 // offset Salta a una dirección de mem[]
#define ljpf 24 // offset Salta si un valor es falso a una dirección #define ljpf 24 // offset Salta si un valor es falso a una dirección
#define lfun 25 // código Llamada a un proceso interno, ej. signal() #define lfun 25 /* código Llamada a un proceso interno, ej. signal() (obsoleto, ver lext) */
#define lcal 26 // offset Crea un nuevo proceso en el programa #define lcal 26 // offset Crea un nuevo proceso en el programa
#define lret 27 // Auto-eliminación del proceso #define lret 27 // Auto-eliminación del proceso
#define lasp 28 // Desecha un valor apilado #define lasp 28 // Desecha un valor apilado
@ -101,24 +101,24 @@
// Instrucciones añadidas para la optimización (DIV 2.0) // Instrucciones añadidas para la optimización (DIV 2.0)
#define lcar2 60 #define lcar2 60 /* car + car */
#define lcar3 61 #define lcar3 61 /* car + car + car */
#define lcar4 62 #define lcar4 62 /* car + car + car + car */
#define lasiasp 63 #define lasiasp 63 /* asi + asp */
#define lcaraid 64 #define lcaraid 64 /* car + aid */
#define lcarptr 65 #define lcarptr 65 /* car + ptr */
#define laidptr 66 #define laidptr 66 /* aid + ptr */
#define lcaraidptr 67 #define lcaraidptr 67 /* car + aid + ptr */
#define lcaraidcpa 68 #define lcaraidcpa 68 /* car + aid + cpa */
#define laddptr 69 #define laddptr 69 /* add + ptr */
#define lfunasp 70 #define lfunasp 70 /* fun + asp (obsoleto, ver lextasp) */
#define lcaradd 71 #define lcaradd 71 /* car + add */
#define lcaraddptr 72 #define lcaraddptr 72 /* car + add + ptr */
#define lcarmul 73 #define lcarmul 73 /* car + mul */
#define lcarmuladd 74 #define lcarmuladd 74 /* car + mul + add */
#define lcarasiasp 75 #define lcarasiasp 75 /* car + asi + asp */
#define lcarsub 76 #define lcarsub 76 /* car + sub */
#define lcardiv 77 #define lcardiv 77 /* car + div */
// Instrucciones añadidas para el manejo de caracteres // Instrucciones añadidas para el manejo de caracteres
@ -177,10 +177,11 @@
#define lslawor 124 // Shl-asignación #define lslawor 124 // Shl-asignación
#define lcpawor 125 // Saca offset, lee parámetro [offset] y bp++ #define lcpawor 125 // Saca offset, lee parámetro [offset] y bp++
// Miscelánea /* Miscelánea */
#define lnul 126 // Comprueba que un puntero no sea NULL #define lnul 126 // Comprueba que un puntero no sea NULL
/* Instrucciones ańadidas en eDIV */
#define lextasp 127 /* ext + asp, sustituye a funasp */
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View file

@ -99,7 +99,7 @@ void dll_func() // ke original, no? XD
#else // si estamos en Linux #else // si estamos en Linux
directorio=opendir("so"); directorio=opendir("so");
if(!directorio) { if(!directorio) {
@ -119,7 +119,7 @@ void dll_func() // ke original, no? XD
fichero_dll=readdir(directorio); fichero_dll=readdir(directorio);
if(fichero_dll==0) if(fichero_dll==0)
break; break;
if(fichero_dll->d_type==DT_REG) { if(fichero_dll->d_type==DT_REG) {
printf("Librería encontrada: so/%s\n",fichero_dll->d_name); printf("Librería encontrada: so/%s\n",fichero_dll->d_name);
strcpy(fichdll,"so/"); strcpy(fichdll,"so/");
strcat(fichdll,fichero_dll->d_name); strcat(fichdll,fichero_dll->d_name);
@ -173,7 +173,7 @@ int leedll(struct _finddata_t fichero_dll)
// Carga la DLL // Carga la DLL
dll_n++; dll_n++;
funciones++; funciones++;
hDLL[dll_n]=LoadDLL(fichdll); hDLL[dll_n]=LoadDLL(fichdll);

Binary file not shown.