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
|
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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -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) {
|
||||||
|
@ -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.
Loading…
Reference in a new issue