]> Cypherpunks repositories - gostls13.git/commitdiff
add sys.BUG_intereq to compare interfaces for equality
authorRuss Cox <rsc@golang.org>
Fri, 10 Oct 2008 22:30:32 +0000 (15:30 -0700)
committerRuss Cox <rsc@golang.org>
Fri, 10 Oct 2008 22:30:32 +0000 (15:30 -0700)
R=r
OCL=16929
CL=16929

src/cmd/gc/sys.go
src/cmd/gc/sysimport.c
src/runtime/rt0_amd64.s

index 8e2e6ac76d4666f459573ab4e1a6ca4642638c2a..83be8da946508c946189dbf99723d09d010c890a 100644 (file)
@@ -80,3 +80,4 @@ export func   stringtorune(string, int32) (int32, int32);     // convert bytes to rune
 
 export func    exit(int32);
 
+export func    BUG_intereq(a, b interface{}) bool;     // should not be necessary
index 1ef5d20be0d7da3971a89cfacc20d87ee3bef089..81ed5321b964c5f74b7a0e61bdf69d2116f9446f 100644 (file)
@@ -68,5 +68,6 @@ char *sysimport =
        "export func sys.bytestorune (? *sys.uint8, ? sys.int32, ? sys.int32) (? sys.int32, ? sys.int32)\n"
        "export func sys.stringtorune (? sys.string, ? sys.int32) (? sys.int32, ? sys.int32)\n"
        "export func sys.exit (? sys.int32)\n"
+       "export func sys.BUG_intereq (a interface { }, b interface { }) (? sys.bool)\n"
        "\n"
        "$$\n";
index 35448e07cc6c794bc0cc3e262bf7d88569276f7f..8e1b13576e4469bca8fb432810181eca1e0d21d9 100644 (file)
@@ -133,3 +133,21 @@ TEXT cas(SB), 7, $0
        MOVL    $1, AX
        RET
 
+// func BUG_intereq(a, b interface{}) bool {
+//     return a == b
+// }
+// TODO: delete once 6g can compile a == b on interfaces.
+TEXT sys·BUG_intereq(SB),7,$0
+       // First interface at 8(SP) and 16(SP)
+       // Second interface at 24(SP) and 32(SP)
+       // Answer at 40(SP)
+       MOVQ 8(SP), AX
+       CMPQ AX, 24(SP)
+       JNE 6(PC)
+       MOVQ 16(SP), AX
+       CMPQ AX, 32(SP)
+       JNE 3(PC)
+       MOVQ $1, 40(SP)
+       RET
+       MOVQ $0, 40(SP)
+       RET