Loading Makefile +1 −1 Original line number Diff line number Diff line malbolge20: malbolge20.c CC -o malbolge20 malbolge20.c -lm ${CC} -o malbolge20 malbolge20.c -lm clean: rm -rf malbolge20 malbolge20.o malbolge20.c +20 −20 Original line number Diff line number Diff line Loading @@ -10,13 +10,13 @@ #ifdef __GNUC__ static inline #endif void exec(int flag[59049], unsigned long **mem, unsigned long init[59049][2] ); void exec(int flag[59049], unsigned int **mem, unsigned int init[59049][2] ); #ifdef __GNUC__ static inline #endif unsigned long op( unsigned long x, unsigned long y ); void make_init_mem(int id, unsigned long **mem, unsigned long init[59049][2]); unsigned int op( unsigned int x, unsigned int y ); void make_init_mem(int id, unsigned int **mem, unsigned int init[59049][2]); const char xlat1[] = "+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA\"lI" Loading @@ -30,10 +30,10 @@ const char xlat2[] = int main( int argc, char **argv ) { unsigned long **mem; unsigned int **mem; int flag[59049];// ブロックが使用済みか否か unsigned long init[59050][2]; // 各ブロックの最初2つ分の初期値を記憶 unsigned long i,ii = 0; unsigned int init[59050][2]; // 各ブロックの最初2つ分の初期値を記憶 unsigned int i,ii = 0; int x; for(i=0;i<59049;i++){// フラグ初期化 Loading @@ -51,7 +51,7 @@ int main( int argc, char **argv ) return ( 1 ); } mem = (unsigned long **)malloc( sizeof(unsigned long) * 59049 ); mem = (unsigned int **)malloc( sizeof(unsigned int) * 59049 ); if ( mem == NULL ) { fclose( f ); Loading @@ -61,7 +61,7 @@ int main( int argc, char **argv ) int id=0; //第0ブロックのメモリ領域確保 mem[id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[id] == NULL ) { fclose( f ); Loading Loading @@ -102,7 +102,7 @@ int main( int argc, char **argv ) return ( 1 ); } //次ブロックのメモリ領域を確保 mem[id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[id] == NULL ) { fclose( f ); Loading Loading @@ -138,7 +138,7 @@ int main( int argc, char **argv ) /* 各ブロックの遅延初期化を行うための準備をする関数 */ /* 各ブロックの最初の2ワードを計算し, initに格納 */ void make_init_mem(int id, unsigned long **mem, unsigned long init[59049][2]){ void make_init_mem(int id, unsigned int **mem, unsigned int init[59049][2]){ int i,j; int x, y, temp0, temp1; int num0[3][3] = {{0, 1, 2}, {0, 1, 1}, {0, 2, 2}, }; Loading Loading @@ -169,7 +169,7 @@ static inline #endif /* JMPとMOV_Dの時に呼ばれ, その処理を実行する. */ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned long **mem, unsigned long init[59049][2], int flag[59049]){ void mem_manage(unsigned int *reg_addr, unsigned int num, int *id, unsigned int **mem, unsigned int init[59049][2], int flag[59049]){ int new_reg_addr=0; int new_id; int i; Loading @@ -182,7 +182,7 @@ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned lo /* 初期化されていないブロックだった場合、初期化する*/ if(flag[new_id]==UNALLOCATED){ //すでに初期化済みかチェック mem[new_id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[new_id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[new_id] == NULL ){ fclose( f ); free(mem); Loading @@ -202,7 +202,7 @@ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned lo } /* 命令実行後のインクリメント. increment(c, c_id)*/ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long **mem, unsigned long init[59049][2]){ void increment(unsigned int *reg_addr, int *id, int flag[59049], unsigned int **mem, unsigned int init[59049][2]){ int i; if ( *reg_addr == 59048 ){ if(*id == 59048){ Loading @@ -210,7 +210,7 @@ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long }else{ *id+=1; *reg_addr=0; if(flag[*id]==UNALLOCATED){ //すでに初期化済みかチェック mem[*id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[*id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[*id] == NULL ){ fclose( f ); fputs( "can't allocate memory\n", stderr ); Loading @@ -230,9 +230,9 @@ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long } void exec( int flag[59049], unsigned long **mem, unsigned long init[59049][2] ) void exec( int flag[59049], unsigned int **mem, unsigned int init[59049][2] ) { unsigned long a = 0, c = 0, d = 0; unsigned int a = 0, c = 0, d = 0; int x; int c_id=0, d_id=0; for (;;) Loading Loading @@ -281,12 +281,12 @@ void exec( int flag[59049], unsigned long **mem, unsigned long init[59049][2] ) static inline #endif unsigned long op( unsigned long x, unsigned long y ) unsigned int op( unsigned int x, unsigned int y ) { unsigned long i = 0, j; static const unsigned long p9[10] = unsigned int i = 0, j; static const unsigned int p9[10] = { 1, 9, 81, 729, 6561 ,59049, 531441, 4782969, 43046721, 387420489}; static const unsigned long o[9][9] = static const unsigned int o[9][9] = { { 4, 3, 3, 1, 0, 0, 1, 0, 0 }, { 4, 3, 5, 1, 0, 2, 1, 0, 2 }, Loading Loading
Makefile +1 −1 Original line number Diff line number Diff line malbolge20: malbolge20.c CC -o malbolge20 malbolge20.c -lm ${CC} -o malbolge20 malbolge20.c -lm clean: rm -rf malbolge20 malbolge20.o
malbolge20.c +20 −20 Original line number Diff line number Diff line Loading @@ -10,13 +10,13 @@ #ifdef __GNUC__ static inline #endif void exec(int flag[59049], unsigned long **mem, unsigned long init[59049][2] ); void exec(int flag[59049], unsigned int **mem, unsigned int init[59049][2] ); #ifdef __GNUC__ static inline #endif unsigned long op( unsigned long x, unsigned long y ); void make_init_mem(int id, unsigned long **mem, unsigned long init[59049][2]); unsigned int op( unsigned int x, unsigned int y ); void make_init_mem(int id, unsigned int **mem, unsigned int init[59049][2]); const char xlat1[] = "+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA\"lI" Loading @@ -30,10 +30,10 @@ const char xlat2[] = int main( int argc, char **argv ) { unsigned long **mem; unsigned int **mem; int flag[59049];// ブロックが使用済みか否か unsigned long init[59050][2]; // 各ブロックの最初2つ分の初期値を記憶 unsigned long i,ii = 0; unsigned int init[59050][2]; // 各ブロックの最初2つ分の初期値を記憶 unsigned int i,ii = 0; int x; for(i=0;i<59049;i++){// フラグ初期化 Loading @@ -51,7 +51,7 @@ int main( int argc, char **argv ) return ( 1 ); } mem = (unsigned long **)malloc( sizeof(unsigned long) * 59049 ); mem = (unsigned int **)malloc( sizeof(unsigned int) * 59049 ); if ( mem == NULL ) { fclose( f ); Loading @@ -61,7 +61,7 @@ int main( int argc, char **argv ) int id=0; //第0ブロックのメモリ領域確保 mem[id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[id] == NULL ) { fclose( f ); Loading Loading @@ -102,7 +102,7 @@ int main( int argc, char **argv ) return ( 1 ); } //次ブロックのメモリ領域を確保 mem[id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[id] == NULL ) { fclose( f ); Loading Loading @@ -138,7 +138,7 @@ int main( int argc, char **argv ) /* 各ブロックの遅延初期化を行うための準備をする関数 */ /* 各ブロックの最初の2ワードを計算し, initに格納 */ void make_init_mem(int id, unsigned long **mem, unsigned long init[59049][2]){ void make_init_mem(int id, unsigned int **mem, unsigned int init[59049][2]){ int i,j; int x, y, temp0, temp1; int num0[3][3] = {{0, 1, 2}, {0, 1, 1}, {0, 2, 2}, }; Loading Loading @@ -169,7 +169,7 @@ static inline #endif /* JMPとMOV_Dの時に呼ばれ, その処理を実行する. */ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned long **mem, unsigned long init[59049][2], int flag[59049]){ void mem_manage(unsigned int *reg_addr, unsigned int num, int *id, unsigned int **mem, unsigned int init[59049][2], int flag[59049]){ int new_reg_addr=0; int new_id; int i; Loading @@ -182,7 +182,7 @@ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned lo /* 初期化されていないブロックだった場合、初期化する*/ if(flag[new_id]==UNALLOCATED){ //すでに初期化済みかチェック mem[new_id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[new_id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[new_id] == NULL ){ fclose( f ); free(mem); Loading @@ -202,7 +202,7 @@ void mem_manage(unsigned long *reg_addr, unsigned long num, int *id, unsigned lo } /* 命令実行後のインクリメント. increment(c, c_id)*/ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long **mem, unsigned long init[59049][2]){ void increment(unsigned int *reg_addr, int *id, int flag[59049], unsigned int **mem, unsigned int init[59049][2]){ int i; if ( *reg_addr == 59048 ){ if(*id == 59048){ Loading @@ -210,7 +210,7 @@ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long }else{ *id+=1; *reg_addr=0; if(flag[*id]==UNALLOCATED){ //すでに初期化済みかチェック mem[*id] = (unsigned long *)malloc( sizeof(unsigned long) * 59049 ); mem[*id] = (unsigned int *)malloc( sizeof(unsigned int) * 59049 ); if ( mem[*id] == NULL ){ fclose( f ); fputs( "can't allocate memory\n", stderr ); Loading @@ -230,9 +230,9 @@ void increment(unsigned long *reg_addr, int *id, int flag[59049], unsigned long } void exec( int flag[59049], unsigned long **mem, unsigned long init[59049][2] ) void exec( int flag[59049], unsigned int **mem, unsigned int init[59049][2] ) { unsigned long a = 0, c = 0, d = 0; unsigned int a = 0, c = 0, d = 0; int x; int c_id=0, d_id=0; for (;;) Loading Loading @@ -281,12 +281,12 @@ void exec( int flag[59049], unsigned long **mem, unsigned long init[59049][2] ) static inline #endif unsigned long op( unsigned long x, unsigned long y ) unsigned int op( unsigned int x, unsigned int y ) { unsigned long i = 0, j; static const unsigned long p9[10] = unsigned int i = 0, j; static const unsigned int p9[10] = { 1, 9, 81, 729, 6561 ,59049, 531441, 4782969, 43046721, 387420489}; static const unsigned long o[9][9] = static const unsigned int o[9][9] = { { 4, 3, 3, 1, 0, 0, 1, 0, 0 }, { 4, 3, 5, 1, 0, 2, 1, 0, 2 }, Loading