From 6c8eb065481c7c7ef5ba7f626257764c25313f06 Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sat, 30 Sep 2017 22:17:41 +0200 Subject: [PATCH 1/7] simple 16x16 GoL implementation in CoGoL --- gol.cgl | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 gol.cgl diff --git a/gol.cgl b/gol.cgl new file mode 100644 index 0000000..dca43aa --- /dev/null +++ b/gol.cgl @@ -0,0 +1,87 @@ +# simpel GoL on 16x16 field + +# three basic shapes +#my field[16]={2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0}; + +# Kok's galaxy +my field[16]={0 , 0 , 0 , 8112 , 8112 , 48 , 6192 , 6192 , 6192 , 6144 , 7152 , 7152 , 0 , 0 , 0 , 0 }; + +my gen=0; +my i; + +my field1[16]; + +my j; +my new; +my old; + +my n[8]; +my nbit[4]; +my tmp; +my i1; + +old=field; +new=field1; + +do { + i=0; + do { + + n[0]=0; + n[1]=0; + n[2]=0; + n[5]=0; + n[6]=0; + n[7]=0; + + if(i>0){ + i1=i-1; + n[0]=old[i1]<<1; + n[1]=old[i1]; + n[2]=old[i1]>>1; + } + n[3]=old[i]<<1; + n[4]=old[i]>>1; + if(i<15){ + i1=i+1; + n[5]=old[i1]<<1; + n[6]=old[i1]; + n[7]=old[i1]>>1; + } + + nbit[0]=n[0]; + nbit[1]=0; + nbit[2]=0; + nbit[3]=0; + j=1; + do { + tmp=nbit[0]; + nbit[0]^=n[j]; + i1=tmp&n[j]; + tmp=nbit[1]; + nbit[1]^=i1; + i1=tmp&i1; + tmp=nbit[2]; + nbit[2]^=i1; + i1=tmp&i1; + nbit[3]^=i1; + j+=1; + } while (j<8); + + tmp=nbit[0] | old[i]; + tmp=tmp&nbit[1]; + tmp=tmp&!nbit[2]; + tmp=tmp&!nbit[3]; + new[i]=tmp; + + i=i+1; + } while(i<16); + + j=0; + do { + old[j]=new[j]; + j=j+1; + } while(j<16); + + gen=gen+1; +} while(gen<32); From fcbea33d9de94f28956398c66e25e0c519cdd1ad Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sat, 30 Sep 2017 22:28:09 +0200 Subject: [PATCH 2/7] fix typo --- gol.cgl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gol.cgl b/gol.cgl index dca43aa..31354aa 100644 --- a/gol.cgl +++ b/gol.cgl @@ -1,10 +1,10 @@ -# simpel GoL on 16x16 field +# simple GoL on 16x16 field # three basic shapes #my field[16]={2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0}; # Kok's galaxy -my field[16]={0 , 0 , 0 , 8112 , 8112 , 48 , 6192 , 6192 , 6192 , 6144 , 7152 , 7152 , 0 , 0 , 0 , 0 }; +my field[16]={0,0,0,8112,8112,48,6192,6192,6192,6144,7152,7152,0,0,0,0}; my gen=0; my i; @@ -68,7 +68,7 @@ do { j+=1; } while (j<8); - tmp=nbit[0] | old[i]; + tmp=nbit[0]|old[i]; tmp=tmp&nbit[1]; tmp=tmp&!nbit[2]; tmp=tmp&!nbit[3]; From 7bee84a58bb40d193c4a2dc6973dc9af39dffd5f Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sat, 30 Sep 2017 22:34:33 +0200 Subject: [PATCH 3/7] apply indent --- gol.cgl | 128 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/gol.cgl b/gol.cgl index 31354aa..816a15f 100644 --- a/gol.cgl +++ b/gol.cgl @@ -4,9 +4,11 @@ #my field[16]={2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0}; # Kok's galaxy -my field[16]={0,0,0,8112,8112,48,6192,6192,6192,6144,7152,7152,0,0,0,0}; +my field[16] = + { 0, 0, 0, 8112, 8112, 48, 6192, 6192, 6192, 6144, 7152, 7152, 0, 0, 0, +0 }; -my gen=0; +my gen = 0; my i; my field1[16]; @@ -20,68 +22,68 @@ my nbit[4]; my tmp; my i1; -old=field; -new=field1; +old = field; +new = field1; do { - i=0; - do { + i = 0; + do { + + n[0] = 0; + n[1] = 0; + n[2] = 0; + n[5] = 0; + n[6] = 0; + n[7] = 0; + + if (i > 0) { + i1 = i - 1; + n[0] = old[i1] << 1; + n[1] = old[i1]; + n[2] = old[i1] >> 1; + } + n[3] = old[i] << 1; + n[4] = old[i] >> 1; + if (i < 15) { + i1 = i + 1; + n[5] = old[i1] << 1; + n[6] = old[i1]; + n[7] = old[i1] >> 1; + } + + nbit[0] = n[0]; + nbit[1] = 0; + nbit[2] = 0; + nbit[3] = 0; + j = 1; + do { + tmp = nbit[0]; + nbit[0] ^= n[j]; + i1 = tmp & n[j]; + tmp = nbit[1]; + nbit[1] ^= i1; + i1 = tmp & i1; + tmp = nbit[2]; + nbit[2] ^= i1; + i1 = tmp & i1; + nbit[3] ^= i1; + j += 1; + } while (j < 8); - n[0]=0; - n[1]=0; - n[2]=0; - n[5]=0; - n[6]=0; - n[7]=0; - - if(i>0){ - i1=i-1; - n[0]=old[i1]<<1; - n[1]=old[i1]; - n[2]=old[i1]>>1; - } - n[3]=old[i]<<1; - n[4]=old[i]>>1; - if(i<15){ - i1=i+1; - n[5]=old[i1]<<1; - n[6]=old[i1]; - n[7]=old[i1]>>1; - } - - nbit[0]=n[0]; - nbit[1]=0; - nbit[2]=0; - nbit[3]=0; - j=1; + tmp = nbit[0] | old[i]; + tmp = tmp & nbit[1]; + tmp = tmp & !nbit[2]; + tmp = tmp & !nbit[3]; + new[i] = tmp; + + i = i + 1; + } while (i < 16); + + j = 0; do { - tmp=nbit[0]; - nbit[0]^=n[j]; - i1=tmp&n[j]; - tmp=nbit[1]; - nbit[1]^=i1; - i1=tmp&i1; - tmp=nbit[2]; - nbit[2]^=i1; - i1=tmp&i1; - nbit[3]^=i1; - j+=1; - } while (j<8); - - tmp=nbit[0]|old[i]; - tmp=tmp&nbit[1]; - tmp=tmp&!nbit[2]; - tmp=tmp&!nbit[3]; - new[i]=tmp; - - i=i+1; - } while(i<16); - - j=0; - do { - old[j]=new[j]; - j=j+1; - } while(j<16); - - gen=gen+1; -} while(gen<32); + old[j] = new[j]; + j = j + 1; + } while (j < 16); + + gen = gen + 1; +} while (gen < 32); From 2c8be053306618efec6ad70da5edf135597c8448 Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sun, 1 Oct 2017 11:50:42 +0200 Subject: [PATCH 4/7] add two buffer rows instead of conditionals --- gol.cgl | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/gol.cgl b/gol.cgl index 816a15f..12d34b3 100644 --- a/gol.cgl +++ b/gol.cgl @@ -1,12 +1,12 @@ # simple GoL on 16x16 field # three basic shapes -#my field[16]={2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0}; +#my field[18]={0,2,24578,24578,0,0,0,0,0,0,0,112,64,32,0,7,0,0}; # note two buffer rows # Kok's galaxy -my field[16] = - { 0, 0, 0, 8112, 8112, 48, 6192, 6192, 6192, 6144, 7152, 7152, 0, 0, 0, -0 }; +my field[18] = + { 0, 0, 0, 0, 8112, 8112, 48, 6192, 6192, 6192, 6144, 7152, 7152, 0, 0, 0, +0, 0 }; my gen = 0; my i; @@ -22,34 +22,25 @@ my nbit[4]; my tmp; my i1; -old = field; +old = field + 1; new = field1; do { i = 0; do { - n[0] = 0; - n[1] = 0; - n[2] = 0; - n[5] = 0; - n[6] = 0; - n[7] = 0; - - if (i > 0) { - i1 = i - 1; - n[0] = old[i1] << 1; - n[1] = old[i1]; - n[2] = old[i1] >> 1; - } + i1 = i - 1; + n[0] = old[i1] << 1; + n[1] = old[i1]; + n[2] = old[i1] >> 1; + n[3] = old[i] << 1; n[4] = old[i] >> 1; - if (i < 15) { - i1 = i + 1; - n[5] = old[i1] << 1; - n[6] = old[i1]; - n[7] = old[i1] >> 1; - } + + i1 = i + 1; + n[5] = old[i1] << 1; + n[6] = old[i1]; + n[7] = old[i1] >> 1; nbit[0] = n[0]; nbit[1] = 0; From 0590a79ba4a14ce171dc76460e53b47242ee3d13 Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sun, 1 Oct 2017 12:27:16 +0200 Subject: [PATCH 5/7] remove field1 --- gol.cgl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gol.cgl b/gol.cgl index 12d34b3..b16f8cd 100644 --- a/gol.cgl +++ b/gol.cgl @@ -11,10 +11,9 @@ my field[18] = my gen = 0; my i; -my field1[16]; +my new[16]; my j; -my new; my old; my n[8]; @@ -23,7 +22,6 @@ my tmp; my i1; old = field + 1; -new = field1; do { i = 0; From 3be56770dd98ce7fd058f49c2afd69fecd8e8629 Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sun, 1 Oct 2017 12:38:00 +0200 Subject: [PATCH 6/7] minor style --- gol.cgl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gol.cgl b/gol.cgl index b16f8cd..2f5c764 100644 --- a/gol.cgl +++ b/gol.cgl @@ -51,28 +51,28 @@ do { i1 = tmp & n[j]; tmp = nbit[1]; nbit[1] ^= i1; - i1 = tmp & i1; + i1 &= tmp; tmp = nbit[2]; nbit[2] ^= i1; - i1 = tmp & i1; + i1 &= tmp; nbit[3] ^= i1; j += 1; } while (j < 8); tmp = nbit[0] | old[i]; - tmp = tmp & nbit[1]; - tmp = tmp & !nbit[2]; - tmp = tmp & !nbit[3]; + tmp &= nbit[1]; + tmp &!= nbit[2]; + tmp &!= nbit[3]; new[i] = tmp; - i = i + 1; + i += 1; } while (i < 16); j = 0; do { old[j] = new[j]; - j = j + 1; + j += 1; } while (j < 16); - gen = gen + 1; + gen += 1; } while (gen < 32); From e3b89eef4d8cba39917a58a5b36bf46723cdfb83 Mon Sep 17 00:00:00 2001 From: Sepulep Date: Sun, 1 Oct 2017 12:58:22 +0200 Subject: [PATCH 7/7] minor optimization --- gol.cgl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gol.cgl b/gol.cgl index 2f5c764..24d615b 100644 --- a/gol.cgl +++ b/gol.cgl @@ -54,12 +54,11 @@ do { i1 &= tmp; tmp = nbit[2]; nbit[2] ^= i1; - i1 &= tmp; - nbit[3] ^= i1; + nbit[3] = i1 & tmp; # since always <= 8 j += 1; } while (j < 8); - tmp = nbit[0] | old[i]; + tmp = nbit[0] | old[i]; tmp &= nbit[1]; tmp &!= nbit[2]; tmp &!= nbit[3];