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
---------
* 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) {
code[15].op=mem[imem-2]=lfunasp;
optimizado=1;
} else if (code[15].op==lext) {
code[15].op=mem[imem-2]=lextasp;
optimizado=1;
} break;
case laid:
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 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 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 lret 27 /* Auto-eliminación del proceso */
#define lasp 28 /* Desecha un valor apilado */
@ -148,24 +148,24 @@ int case_sensitive;
#define ldbg 59 /* Invoca al debugger */
/* Instrucciones añadidas para la optimización (DIV 2.0) */
#define lcar2 60
#define lcar3 61
#define lcar4 62
#define lasiasp 63
#define lcaraid 64
#define lcarptr 65
#define laidptr 66
#define lcaraidptr 67
#define lcaraidcpa 68
#define laddptr 69
#define lfunasp 70
#define lcaradd 71
#define lcaraddptr 72
#define lcarmul 73
#define lcarmuladd 74
#define lcarasiasp 75
#define lcarsub 76
#define lcardiv 77
#define lcar2 60 /* car + car */
#define lcar3 61 /* car + car + car */
#define lcar4 62 /* car + car + car + car */
#define lasiasp 63 /* asi + asp */
#define lcaraid 64 /* car + aid */
#define lcarptr 65 /* car + ptr */
#define laidptr 66 /* aid + ptr */
#define lcaraidptr 67 /* car + aid + ptr */
#define lcaraidcpa 68 /* car + aid + cpa */
#define laddptr 69 /* add + ptr */
#define lfunasp 70 /* fun + asp (obsoleto, ver lextasp) */
#define lcaradd 71 /* car + add */
#define lcaraddptr 72 /* car + add + ptr */
#define lcarmul 73 /* car + mul */
#define lcarmuladd 74 /* car + mul + add */
#define lcarasiasp 75 /* car + asi + asp */
#define lcarsub 76 /* car + sub */
#define lcardiv 77 /* car + div */
/* Instrucciones añadidas para el manejo de caracteres */
#define lptrchr 78 /* Pointer, saca (index, offset) y mete [offset+byte index] */
@ -224,6 +224,9 @@ int case_sensitive;
/* Miscelánea */
#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 */
int dir; /* Dirección */

View file

@ -355,6 +355,10 @@ void listado_ensamblador (void)
case lstrmai: fprintf(sta,"%5u\tstrmai",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;
} fprintf(sta,"\n"); i++; }
fclose (sta);

View file

@ -523,7 +523,10 @@ int proceso( int num, int padre )
break;
case lcaraidcpa://68
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;
case laddptr://69
pila[sp-1]=mem[pila[sp-1]+pila[sp]];
@ -1009,6 +1012,17 @@ int proceso( int num, int padre )
}
#endif*/
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

View file

@ -63,7 +63,7 @@
#define lrng 22 // rango Realiza una comparación de rango
#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 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 lret 27 // Auto-eliminación del proceso
#define lasp 28 // Desecha un valor apilado
@ -101,24 +101,24 @@
// Instrucciones añadidas para la optimización (DIV 2.0)
#define lcar2 60
#define lcar3 61
#define lcar4 62
#define lasiasp 63
#define lcaraid 64
#define lcarptr 65
#define laidptr 66
#define lcaraidptr 67
#define lcaraidcpa 68
#define laddptr 69
#define lfunasp 70
#define lcaradd 71
#define lcaraddptr 72
#define lcarmul 73
#define lcarmuladd 74
#define lcarasiasp 75
#define lcarsub 76
#define lcardiv 77
#define lcar2 60 /* car + car */
#define lcar3 61 /* car + car + car */
#define lcar4 62 /* car + car + car + car */
#define lasiasp 63 /* asi + asp */
#define lcaraid 64 /* car + aid */
#define lcarptr 65 /* car + ptr */
#define laidptr 66 /* aid + ptr */
#define lcaraidptr 67 /* car + aid + ptr */
#define lcaraidcpa 68 /* car + aid + cpa */
#define laddptr 69 /* add + ptr */
#define lfunasp 70 /* fun + asp (obsoleto, ver lextasp) */
#define lcaradd 71 /* car + add */
#define lcaraddptr 72 /* car + add + ptr */
#define lcarmul 73 /* car + mul */
#define lcarmuladd 74 /* car + mul + add */
#define lcarasiasp 75 /* car + asi + asp */
#define lcarsub 76 /* car + sub */
#define lcardiv 77 /* car + div */
// Instrucciones añadidas para el manejo de caracteres
@ -177,10 +177,11 @@
#define lslawor 124 // Shl-asignación
#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
/* 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");
if(!directorio) {
@ -119,7 +119,7 @@ void dll_func() // ke original, no? XD
fichero_dll=readdir(directorio);
if(fichero_dll==0)
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);
strcpy(fichdll,"so/");
strcat(fichdll,fichero_dll->d_name);
@ -173,7 +173,7 @@ int leedll(struct _finddata_t fichero_dll)
// Carga la DLL
dll_n++;
funciones++;
funciones++;
hDLL[dll_n]=LoadDLL(fichdll);

Binary file not shown.