]> Cypherpunks repositories - gostls13.git/commitdiff
6a/6l: add IMUL3Q and SHLDL
authorAdam Langley <agl@golang.org>
Thu, 23 Feb 2012 15:51:04 +0000 (10:51 -0500)
committerAdam Langley <agl@golang.org>
Thu, 23 Feb 2012 15:51:04 +0000 (10:51 -0500)
Although Intel considers the three-argument form of IMUL to be a
variant of IMUL, I couldn't make 6l able to differentiate it without
huge changes, so I called it IMUL3.

R=rsc
CC=golang-dev
https://golang.org/cl/5686055

src/cmd/6a/lex.c
src/cmd/6l/6.out.h
src/cmd/6l/optab.c

index 1a8e5ad619d76cffdc4038a2d3e57f51525ceb1a..e013bec2a7dbc58c37108fc4389a4267678b7264 100644 (file)
@@ -396,6 +396,7 @@ struct
        "IMULB",        LTYPEI, AIMULB,
        "IMULL",        LTYPEI, AIMULL,
        "IMULQ",        LTYPEI, AIMULQ,
+       "IMUL3Q",       LTYPEX, AIMUL3Q,
        "IMULW",        LTYPEI, AIMULW,
        "INB",          LTYPE0, AINB,
        "INL",          LTYPE0, AINL,
index 559cdc758b2b5f3d266623b6fe71938443e52359..8499159543f116acd4090be7a6f74d62294e3eeb 100644 (file)
@@ -735,6 +735,7 @@ enum        as
        AMODE,
        ACRC32B,
        ACRC32Q,
+       AIMUL3Q,
 
        ALAST
 };
index 2308e0dfea08bef129f532c345bc43cca429c40f..5746ded19c23a2c2279ccd4d165c5188f683bc61 100644 (file)
@@ -267,6 +267,11 @@ uchar      yimul[] =
        Yml,    Yrl,    Zm_r,   2,
        0
 };
+uchar  yimul3[] =
+{
+       Yml,    Yrl,    Zibm_r, 1,
+       0
+};
 uchar  ybyte[] =
 {
        Yi64,   Ynone,  Zbyte,  1,
@@ -772,6 +777,7 @@ Optab optab[] =
        { AIMULL,       yimul,  Px, 0xf7,(05),0x6b,0x69,Pm,0xaf },
        { AIMULQ,       yimul,  Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf },
        { AIMULW,       yimul,  Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf },
+       { AIMUL3Q,      yimul3, Pw, 0x6b },
        { AINB,         yin,    Pb, 0xe4,0xec },
        { AINCB,        yincb,  Pb, 0xfe,(00) },
        { AINCL,        yincl,  Px, 0xff,(00) },