strings y extasp
This commit is contained in:
parent
14d854c6e4
commit
6f239e1691
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
@ -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) {
|
||||
|
@ -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.
Loading…
Reference in a new issue