123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <stdint.h>
- #include <time.h>
- int decimal_to_binary(char* p, int32_t n)
- {
- int32_t c, d, t;
- t = 0;
- if (p == NULL)
- exit(EXIT_FAILURE);
- for (c = 31 ; c >= 0 ; c--)
- {
- d = n >> c;
- if (d & 1)
- *(p+t) = 1 + '0';
- else
- *(p+t) = 0 + '0';
- t++;
- }
- *(p+t) = '\n';
- *(p+t+1) = '\0';
- return 0;
- }
- int unsigned_decimal_to_binary(char* p, uint32_t n)
- {
- int c;
- uint32_t d, t;
- t = 0;
- if (p == NULL)
- exit(EXIT_FAILURE);
- for (c = 31 ; c >= 0 ; c--)
- {
- d = n >> c;
- if (d & 1)
- *(p+t) = 1 + '0';
- else
- *(p+t) = 0 + '0';
- t++;
- }
- *(p+t) = '\n';
- *(p+t+1) = '\0';
- return 0;
- }
- int main (int argc, char ** argv) {
- int i;
- int32_t r, s;
- uint32_t ur, us;
- FILE* output;
- FILE* input;
- char str[40];
- output = fopen("./testdata/output.txt", "w");
- input = fopen("./testdata/input.txt", "w");
- srand(time(NULL));
- for (i = 0; i < 5; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
-
- fputs("ALU_NOP\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
- decimal_to_binary(str, s);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 5; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
- fputs("ALU_SLT\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
- if (r < s)
- fputs("00000000000000000000000000000001\n", output);
- else
- fputs("00000000000000000000000000000000\n", output);
- if (r < s)
- fputs("0\n\n", output);
- else
- fputs("1\n\n", output);
-
-
- }
- for (i = 0; i < 50; i++) {
- ur = (uint32_t) ((int32_t) rand()+rand());
- us = (uint32_t) ((int32_t) rand()+rand());
- fputs("ALU_SLTU\n", input);
- unsigned_decimal_to_binary(str, ur);
- fputs(str, input);
- unsigned_decimal_to_binary(str, us);
- fputs(str, input);
- fputs("\n", input);
-
-
- if (ur < us)
- fputs("00000000000000000000000000000001\n", output);
- else
- fputs("00000000000000000000000000000000\n", output);
- if (ur < us)
- fputs("0\n\n", output);
- else
- fputs("1\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- ur = (uint32_t) ((int32_t) rand()+rand());
- us = (uint32_t) ((int32_t) rand()+rand());
- fputs("ALU_SLL\n", input);
-
- unsigned_decimal_to_binary(str, ur);
- fputs(str, input);
- unsigned_decimal_to_binary(str, us);
- fputs(str, input);
- fputs("\n", input);
-
- unsigned_decimal_to_binary(str, ur << us);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- ur = (uint32_t) ((int32_t) rand()+rand());
- us = (uint32_t) ((int32_t) rand()+rand());
- fputs("ALU_SRL\n", input);
- unsigned_decimal_to_binary(str, ur);
- fputs(str, input);
- unsigned_decimal_to_binary(str, us);
- fputs(str, input);
- fputs("\n", input);
-
- unsigned_decimal_to_binary(str, ur >> us);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand());
- us = (uint32_t) ((int32_t) rand()+rand());
- fputs("ALU_SRA\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- unsigned_decimal_to_binary(str, us);
- fputs(str, input);
- fputs("\n", input);
-
-
- unsigned_decimal_to_binary(str, r >> us);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
- fputs("ALU_ADD\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
-
- decimal_to_binary(str, r + s);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
- fputs("ALU_SUB\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
-
- decimal_to_binary(str, r - s);
- fputs(str, output);
- if (r == s)
- fputs("1\n\n", output);
- else
- fputs("0\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
- fputs("ALU_AND\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
-
- decimal_to_binary(str, r & s);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand());
- s = ((int32_t) rand()+rand());
- fputs("ALU_OR\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- fputs("\n", input);
-
-
- decimal_to_binary(str, r | s);
- fputs(str, output);
- fputs("-\n\n", output);
- }
- for (i = 0; i < 50; i++) {
- r = ((int32_t) rand()+rand()) ;
- s = ((int32_t) rand()+rand()) ;
- fputs("ALU_XOR\n", input);
- decimal_to_binary(str, r);
- fputs(str, input);
- decimal_to_binary(str, s);
- fputs(str, input);
- if (i != 49) {
- fputs("\n", input);
- }
-
- decimal_to_binary(str, r ^ s);
- fputs(str, output);
- fputs("-\n", output);
- if (i != 49) {
- fputs("\n", input);
- }
- }
- fclose(output);
- fclose(input);
- }
|