diff options
| author | MichaĆ Derkacz <ziutek@lnet.pl> | 2012-08-03 16:15:11 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2012-08-03 16:15:11 -0400 |
| commit | dee5adcf74d249adf1d6ba83eb906dbb60e2ee4f (patch) | |
| tree | 5c3027f3d853a56d6c38667ed117cd390e4f330a /src/cmd | |
| parent | 823962c52186415d61f23a819af298dd45ed3a52 (diff) | |
| download | go-dee5adcf74d249adf1d6ba83eb906dbb60e2ee4f.tar.xz | |
5a, 5l, math: Add support for ABSD, ABSF floating point instructions.
R=golang-dev, dave, rsc, minux.ma
CC=golang-dev
https://golang.org/cl/6225051
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/5a/lex.c | 4 | ||||
| -rw-r--r-- | src/cmd/5l/5.out.h | 2 | ||||
| -rw-r--r-- | src/cmd/5l/asm.c | 4 | ||||
| -rw-r--r-- | src/cmd/5l/softfloat.c | 2 | ||||
| -rw-r--r-- | src/cmd/5l/span.c | 2 |
5 files changed, 11 insertions, 3 deletions
diff --git a/src/cmd/5a/lex.c b/src/cmd/5a/lex.c index 19e5982bfc..cc02879b76 100644 --- a/src/cmd/5a/lex.c +++ b/src/cmd/5a/lex.c @@ -329,8 +329,6 @@ struct "STREXD", LTYPE9, ASTREXD, /* - "ABSF", LTYPEI, AABSF, - "ABSD", LTYPEI, AABSD, "NEGF", LTYPEI, ANEGF, "NEGD", LTYPEI, ANEGD, "SQTF", LTYPEI, ASQTF, @@ -343,6 +341,8 @@ struct "NRMD", LTYPEI, ANRMD, */ + "ABSF", LTYPEI, AABSF, + "ABSD", LTYPEI, AABSD, "SQRTF", LTYPEI, ASQRTF, "SQRTD", LTYPEI, ASQRTD, "CMPF", LTYPEL, ACMPF, diff --git a/src/cmd/5l/5.out.h b/src/cmd/5l/5.out.h index ff13c64a6e..1dea18c49e 100644 --- a/src/cmd/5l/5.out.h +++ b/src/cmd/5l/5.out.h @@ -126,6 +126,8 @@ enum as ADIVD, ASQRTF, ASQRTD, + AABSF, + AABSD, ASRL, ASRA, diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 911b6892cf..9a74c2a35d 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -1493,7 +1493,7 @@ if(debug['G']) print("%ux: %s: arm %d\n", (uint32)(p->pc), p->from.sym->name, p- r = p->reg; if(r == NREG) { r = rt; - if(p->as == AMOVF || p->as == AMOVD || p->as == ASQRTF || p->as == ASQRTD) + if(p->as == AMOVF || p->as == AMOVD || p->as == ASQRTF || p->as == ASQRTD || p->as == AABSF || p->as == AABSD) r = 0; } o1 |= rf | (r<<16) | (rt<<12); @@ -1948,6 +1948,8 @@ oprrr(int a, int sc) case ADIVF: return o | (0xe<<24) | (0x8<<20) | (0xa<<8) | (0<<4); case ASQRTD: return o | (0xe<<24) | (0xb<<20) | (1<<16) | (0xb<<8) | (0xc<<4); case ASQRTF: return o | (0xe<<24) | (0xb<<20) | (1<<16) | (0xa<<8) | (0xc<<4); + case AABSD: return o | (0xe<<24) | (0xb<<20) | (0<<16) | (0xb<<8) | (0xc<<4); + case AABSF: return o | (0xe<<24) | (0xb<<20) | (0<<16) | (0xa<<8) | (0xc<<4); case ACMPD: return o | (0xe<<24) | (0xb<<20) | (4<<16) | (0xb<<8) | (0xc<<4); case ACMPF: return o | (0xe<<24) | (0xb<<20) | (4<<16) | (0xa<<8) | (0xc<<4); diff --git a/src/cmd/5l/softfloat.c b/src/cmd/5l/softfloat.c index 4011071780..8be5b7585c 100644 --- a/src/cmd/5l/softfloat.c +++ b/src/cmd/5l/softfloat.c @@ -55,6 +55,8 @@ softfloat(void) case ADIVD: case ASQRTF: case ASQRTD: + case AABSF: + case AABSD: goto soft; default: diff --git a/src/cmd/5l/span.c b/src/cmd/5l/span.c index 93991ba49c..3787740e28 100644 --- a/src/cmd/5l/span.c +++ b/src/cmd/5l/span.c @@ -819,6 +819,8 @@ buildop(void) oprange[ASQRTD] = oprange[r]; oprange[AMOVFD] = oprange[r]; oprange[AMOVDF] = oprange[r]; + oprange[AABSF] = oprange[r]; + oprange[AABSD] = oprange[r]; break; case ACMPF: |
