]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/5c, cmd/5a, cmd/5l: ARM support for PREFETCH built-in
authorShenghou Ma <minux.ma@gmail.com>
Thu, 3 May 2012 19:24:14 +0000 (03:24 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Thu, 3 May 2012 19:24:14 +0000 (03:24 +0800)
R=rsc
CC=golang-dev
https://golang.org/cl/6174049

src/cmd/5a/a.y
src/cmd/5a/y.tab.c
src/cmd/5c/peep.c
src/cmd/5c/reg.c
src/cmd/5c/txt.c
src/cmd/5l/asm.c
src/cmd/5l/optab.c

index 401abe51d5ced9317e03258fa55deb606e5b3b2b..45e192e62e538b46f6cc1a2fdf615626d1935c07 100644 (file)
@@ -304,7 +304,7 @@ inst:
 /*
  * PLD
  */
-|      LTYPEPLD reg
+|      LTYPEPLD oreg
        {
                outcode($1, Always, &$2, NREG, &nullgen);
        }
index 0c4c7db566f0581f14520ed3cfec39b86ff1a280..0b256717799f464d3c60aac5cbac8d9624763c7e 100644 (file)
@@ -448,7 +448,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   609
+#define YYLAST   603
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  70
@@ -549,7 +549,7 @@ static const yytype_int8 yyrhs[] =
       77,   102,    63,   104,    63,    95,    63,    96,    63,    96,
      103,    -1,    34,    77,    90,    63,    90,    63,    91,    -1,
       35,    77,    90,    63,    90,    63,    90,    63,    95,    -1,
-      37,    90,    -1,    26,    78,    -1,    -1,    77,    52,    -1,
+      37,    87,    -1,    26,    78,    -1,    -1,    77,    52,    -1,
       77,    53,    -1,    -1,    63,    78,    -1,   102,    66,    42,
       67,    -1,    57,   100,    -1,    58,   100,    -1,    68,   102,
       -1,    68,    87,    -1,    68,    10,    68,    87,    -1,    68,
@@ -586,16 +586,16 @@ static const yytype_uint16 yyrline[] =
       93,    99,   100,   101,   107,   111,   115,   122,   129,   136,
      140,   147,   154,   161,   168,   175,   184,   196,   200,   204,
      211,   218,   222,   229,   236,   243,   250,   254,   258,   262,
-     269,   291,   298,   307,   315,   321,   324,   328,   333,   334,
-     337,   343,   352,   360,   366,   371,   376,   382,   385,   391,
-     399,   403,   412,   418,   419,   420,   421,   426,   432,   438,
-     444,   445,   448,   449,   457,   466,   467,   476,   477,   483,
-     486,   487,   488,   490,   498,   506,   515,   521,   527,   533,
-     541,   547,   555,   556,   560,   568,   569,   575,   576,   584,
-     585,   588,   594,   602,   610,   618,   628,   631,   635,   641,
-     642,   643,   646,   647,   651,   655,   659,   663,   669,   672,
-     678,   679,   683,   687,   691,   695,   699,   703,   707,   711,
-     715
+     269,   291,   298,   307,   314,   320,   323,   327,   332,   333,
+     336,   342,   351,   359,   365,   370,   375,   381,   384,   390,
+     398,   402,   411,   417,   418,   419,   420,   425,   431,   437,
+     443,   444,   447,   448,   456,   465,   466,   475,   476,   482,
+     485,   486,   487,   489,   497,   505,   514,   520,   526,   532,
+     540,   546,   554,   555,   559,   567,   568,   574,   575,   583,
+     584,   587,   593,   601,   609,   617,   627,   630,   634,   640,
+     641,   642,   645,   646,   650,   654,   658,   662,   668,   671,
+     677,   678,   682,   686,   690,   694,   698,   702,   706,   710,
+     714
 };
 #endif
 
@@ -684,28 +684,28 @@ static const yytype_uint8 yydefact[] =
        0,    11,     4,     0,    13,     0,     0,     0,    48,    48,
        0,    48,     0,     0,    48,    48,     0,     0,   112,   106,
      113,     0,     0,     0,     0,     0,     0,    44,     0,     0,
-       0,     0,     0,     0,     0,     0,    96,    93,     0,    92,
-      43,    95,    84,     7,     0,     5,     0,    12,    46,    47,
-       0,     0,    81,    80,    82,    84,     0,     0,   101,    67,
-      68,     0,     0,    64,    57,     0,    75,    79,    70,    63,
-      65,    71,    77,    69,     0,    49,   106,   106,    22,     0,
-       0,     0,     0,     0,     0,     0,     0,    30,   115,   114,
-       0,     0,     0,     0,   120,     0,   116,     0,     0,     0,
-      48,    35,     0,     0,     0,   100,     0,    99,     0,     0,
-       0,     0,    21,     0,     0,     0,     0,     0,    83,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    58,
-      56,    54,    53,     0,     0,     0,     0,   106,    19,    20,
-      72,    73,     0,    51,    52,     0,    23,     0,     0,    48,
-       0,     0,     0,     0,   106,   107,   108,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   117,    31,
-       0,   110,   109,   111,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,     0,     0,     8,     9,     6,    10,    16,
-      84,     0,     0,     0,     0,    17,     0,    74,    59,     0,
-      18,     0,     0,     0,    51,     0,     0,    48,     0,     0,
-       0,     0,     0,    48,     0,     0,   130,   129,   128,     0,
-       0,   121,   122,   123,   124,   125,     0,   103,     0,    36,
-       0,   101,    37,    48,     0,     0,    94,    15,    86,    90,
-      91,    87,    88,    89,   102,    55,     0,    66,    78,    76,
+       0,     0,     0,     0,     0,     0,     0,    75,    79,    43,
+      77,     0,     7,     0,     5,     0,    12,    96,    93,     0,
+      92,    46,    47,     0,     0,    81,    80,    82,    95,    84,
+       0,     0,   101,    67,    68,     0,    64,    57,     0,    70,
+      63,    65,    71,    69,     0,    49,   106,   106,    22,     0,
+       0,     0,     0,     0,     0,     0,     0,    84,    30,   115,
+     114,     0,     0,     0,     0,   120,     0,   116,     0,     0,
+       0,    48,    35,     0,     0,     0,   100,     0,    99,     0,
+       0,     0,     0,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,    83,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    58,    56,    54,    53,     0,     0,   106,    19,
+      20,    72,    73,     0,    51,    52,     0,    23,     0,     0,
+      48,     0,     0,     0,     0,   106,   107,   108,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   117,
+      31,     0,   110,   109,   111,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,     0,    74,     0,     0,     8,     9,
+       6,    10,     0,    16,    84,     0,     0,     0,     0,    17,
+       0,    59,     0,    18,     0,    51,     0,     0,    48,     0,
+       0,     0,     0,     0,    48,     0,     0,   130,   129,   128,
+       0,     0,   121,   122,   123,   124,   125,     0,   103,     0,
+      36,     0,   101,    37,    48,     0,     0,    78,    76,    94,
+      15,    86,    90,    91,    87,    88,    89,   102,    55,    66,
       50,    24,     0,    61,    62,     0,    29,    48,    28,     0,
      104,   126,   127,    32,    33,     0,     0,    39,     0,     0,
       14,    26,    25,    27,     0,     0,    38,     0,    41,     0,
@@ -716,59 +716,59 @@ static const yytype_uint8 yydefact[] =
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     3,    32,   146,   144,    33,    35,   105,   108,
-      93,    94,   178,    95,   169,    96,    97,    98,    81,    82,
-      83,   308,    84,   268,    71,    72,   316,   136,   101,   102,
-     123,   204,   124,   327,   125
+      -1,     1,     3,    32,   149,   147,    33,    35,   105,   108,
+      96,    97,   179,    98,   170,    67,    68,    99,    84,    85,
+      86,   308,    87,   271,    88,   117,   316,   137,   102,    70,
+     124,   205,   125,   327,   126
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -119
+#define YYPACT_NINF -114
 static const yytype_int16 yypact[] =
 {
-    -119,    29,  -119,   283,    -9,  -119,  -119,  -119,  -119,   -23,
-    -119,  -119,  -119,  -119,  -119,   407,   407,  -119,   -23,   -23,
-    -119,  -119,  -119,  -119,  -119,  -119,   -23,   383,   -24,    16,
-      18,  -119,  -119,    25,  -119,   196,   196,   320,    52,   -23,
-     374,    52,   196,   342,   294,    52,   447,   447,  -119,   125,
-    -119,   447,   447,    45,    47,   109,   174,  -119,    62,    98,
-     382,   130,    98,   174,   174,    69,  -119,  -119,    80,  -119,
-    -119,  -119,  -119,  -119,   447,  -119,   447,  -119,  -119,  -119,
-     447,    96,  -119,  -119,  -119,    24,   105,    95,  -119,  -119,
-    -119,   360,   101,  -119,  -119,   108,  -119,  -119,  -119,  -119,
-     119,  -119,   127,   131,   401,  -119,    76,    76,  -119,   141,
-     224,   111,   383,   154,   149,    69,   162,  -119,  -119,  -119,
-     221,   447,   447,   163,  -119,    40,  -119,   409,   170,   447,
-     -23,  -119,   167,   171,     2,  -119,   176,  -119,   181,   183,
-     184,   383,  -119,   447,   283,   530,   283,   540,  -119,   383,
-     244,   245,   251,   260,   383,   447,   206,   441,   208,  -119,
-    -119,  -119,   131,   224,   383,   110,   282,   125,  -119,  -119,
-    -119,  -119,   213,  -119,  -119,   238,  -119,   383,   220,     9,
-     222,   110,   225,    69,    76,  -119,  -119,   170,   447,   447,
-     447,   285,   287,   447,   447,   447,   447,   447,  -119,  -119,
-     247,  -119,  -119,  -119,   263,   248,  -119,    71,   447,   276,
-      79,    71,   383,   383,    56,  -119,  -119,  -119,  -119,  -119,
-     271,   360,   360,   360,   360,  -119,   268,  -119,  -119,   415,
-    -119,   270,   277,   281,   163,    60,   293,   -23,   280,   383,
-     383,   383,   383,   286,   297,   311,   589,   579,   597,   447,
-     447,   211,   211,  -119,  -119,  -119,   284,  -119,    62,  -119,
-     520,   318,  -119,   -23,   321,   322,  -119,   383,  -119,  -119,
-    -119,  -119,  -119,  -119,  -119,  -119,   131,  -119,  -119,  -119,
-    -119,  -119,   453,  -119,  -119,   327,  -119,    77,  -119,   347,
-    -119,   478,   478,  -119,  -119,   383,    71,  -119,   330,   383,
-    -119,  -119,  -119,  -119,   326,   334,  -119,   383,  -119,   337,
-    -119,   115,   340,   383,   341,  -119,   350,   383,  -119,   447,
-     115,   354,    86,   367,  -119,  -119,   447,  -119,   570
+    -114,    19,  -114,   311,   -20,  -114,  -114,  -114,  -114,   -36,
+    -114,  -114,  -114,  -114,  -114,   413,   413,  -114,   -36,   -36,
+    -114,  -114,  -114,  -114,  -114,  -114,   -36,   427,   -22,    -9,
+      -7,  -114,  -114,    11,  -114,   480,   480,   341,    45,   -36,
+     229,    45,   480,   210,   436,    45,   435,   435,  -114,   152,
+    -114,   435,   435,    25,    15,    79,   517,  -114,    24,   134,
+     393,   197,   134,   517,   517,    28,    71,  -114,  -114,  -114,
+      35,    58,  -114,   435,  -114,   435,  -114,  -114,  -114,    69,
+    -114,  -114,  -114,   435,    51,  -114,  -114,  -114,  -114,    46,
+      57,    75,  -114,  -114,  -114,   119,  -114,  -114,    82,  -114,
+    -114,    88,  -114,    58,   368,  -114,   159,   159,  -114,   113,
+     373,   114,   411,   120,   123,    28,   145,  -114,  -114,  -114,
+    -114,   193,   435,   435,   173,  -114,    54,  -114,   395,   111,
+     435,   -36,  -114,   178,   182,    21,  -114,   198,  -114,   201,
+     207,   212,   411,  -114,   206,   168,   558,   311,   310,   311,
+     506,   435,  -114,   411,   271,   274,   285,   286,   411,   435,
+      87,   228,  -114,  -114,  -114,    58,   373,   411,   152,  -114,
+    -114,  -114,  -114,   231,  -114,  -114,   257,  -114,   411,   235,
+       5,   259,   168,   275,    28,   159,  -114,  -114,   111,   435,
+     435,   435,   333,   344,   435,   435,   435,   435,   435,  -114,
+    -114,   289,  -114,  -114,  -114,   300,   308,  -114,   151,   435,
+     319,   176,   151,   411,   411,  -114,   317,   322,  -114,  -114,
+    -114,  -114,   224,  -114,   312,    71,    71,    71,    71,  -114,
+     323,  -114,   427,  -114,   328,   173,    64,   329,   -36,   315,
+     411,   411,   411,   411,   334,   339,   332,   577,   247,   584,
+     435,   435,   273,   273,  -114,  -114,  -114,   340,  -114,    24,
+    -114,   350,   351,  -114,   -36,   353,   365,  -114,  -114,  -114,
+     411,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
+    -114,  -114,   439,  -114,  -114,   364,  -114,   157,  -114,   398,
+    -114,   518,   518,  -114,  -114,   411,   151,  -114,   374,   411,
+    -114,  -114,  -114,  -114,   382,   394,  -114,   411,  -114,   397,
+    -114,   155,   403,   411,   392,  -114,   404,   411,  -114,   435,
+     155,   401,   299,   406,  -114,  -114,   435,  -114,   568
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -119,  -119,  -119,   -73,  -119,  -119,  -119,   547,    -6,   332,
-     -50,   376,   -60,   -82,  -119,   -46,   -39,   -86,   -15,  -118,
-     -22,  -119,   -27,   152,  -111,   -35,   118,  -119,   -45,     8,
-     -81,   255,   132,  -119,     6
+    -114,  -114,  -114,   -78,  -114,  -114,  -114,   529,     2,   367,
+     -50,   415,    48,   -88,  -114,   -48,   -40,   -21,    47,  -113,
+     -19,  -114,   -28,   137,   -59,   -35,   154,  -114,   -49,    18,
+     -83,   295,   -11,  -114,   -25
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -778,132 +778,132 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -61
 static const yytype_int16 yytable[] =
 {
-      85,    85,    85,    40,   113,    70,   161,    85,   131,   199,
-     100,   209,    57,    58,   132,    99,   137,   138,   239,   142,
-      65,    86,   116,    53,    55,   173,   174,   111,   176,     2,
-     150,   151,   104,   152,   130,   110,    73,    74,   115,   117,
-      39,   139,   140,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,    34,   232,   233,   156,   159,   170,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   182,
-     233,   215,    39,   217,   -60,    85,    75,   179,   153,    76,
-     145,   230,   147,   100,   121,   122,   234,    77,    99,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   201,
-     202,   203,   236,   244,    78,    79,   156,   198,   127,    46,
-     157,   158,   171,   128,   220,    39,    66,    87,    88,    67,
-     129,    68,    69,   266,   206,    87,   261,   219,    85,   231,
-      92,   120,   225,   121,   122,   141,   100,   243,   293,    48,
-      39,    99,   237,   275,    87,    88,   143,    54,    54,   214,
-      78,    79,    67,   325,    68,    69,   159,   160,    49,   149,
-      50,   155,   259,   314,   315,   262,   263,    91,   154,   103,
-      52,   163,   109,   240,   177,   114,    87,    88,   118,   119,
-     284,   285,    78,    79,   126,   164,   269,   269,   269,   269,
-     264,   265,   133,   165,   246,   247,   248,   166,   134,   251,
-     252,   253,   254,   255,   283,   179,   179,   175,   294,   201,
-     202,   203,   148,    66,   260,   181,    67,   180,    68,    69,
-     286,   195,   196,   197,   162,   183,    78,    79,   184,   187,
-     207,   281,    46,    47,   208,    66,   172,   288,    67,   210,
-      68,    69,   103,   301,   211,   300,   212,   213,    78,    79,
-     221,   306,   222,   185,   186,   291,   292,   297,   223,   200,
-     305,   205,    48,    66,    80,   303,    67,   224,    68,    69,
-      87,    88,   312,   227,    89,    90,   229,   309,   318,   235,
-     236,    49,   321,    50,     4,   238,   241,   226,   242,   119,
-      91,   249,    92,    52,   250,   103,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-     256,   258,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,   201,   202,   203,    67,   322,    68,    69,    46,    47,
-     257,   228,   328,    66,   267,   274,    67,   277,    68,    69,
-      28,    29,    30,   282,   278,    31,    78,    79,   279,   287,
-      46,    47,    80,   270,   270,   270,   270,    39,    48,    66,
-     280,   276,    67,   289,    68,    69,    87,    88,    46,    47,
-      89,    90,    78,    79,   271,   272,   273,    49,   290,    50,
-      48,   296,    46,    47,   298,   299,    91,   304,    92,    52,
-      46,    47,   302,   310,    78,    79,   307,   311,    48,    66,
-     313,    50,    67,   317,    68,    69,   112,   319,    91,    46,
-      47,    52,    48,   320,   114,    46,    47,    46,    47,    50,
-      48,   324,    66,    46,    47,    67,    51,    68,    69,    52,
-     326,   106,   107,    50,    78,    79,   168,   135,   323,    48,
-      51,    50,   245,    52,     0,    48,     0,    48,    51,    46,
-      47,    52,     0,    48,     0,    46,    47,     0,   167,   107,
-      50,    46,    47,     0,    49,     0,    50,    91,    50,     0,
-      52,     0,    49,    51,    50,    51,    52,    80,    52,    48,
-       0,    91,     0,     0,    52,    48,   193,   194,   195,   196,
-     197,    48,     0,     0,     0,     0,   228,     0,     0,     0,
-      50,     0,     0,     0,     0,     0,    50,    51,     0,     0,
-      52,     0,    50,    51,     0,     0,    52,     0,     0,    91,
-       0,     0,    52,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,    36,    37,    38,     0,    41,    42,    43,
-      44,    45,     0,     0,    56,     0,     0,    59,    60,    61,
-      62,    63,    64,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   295,   190,   191,   192,   193,   194,   195,
-     196,   197,   216,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   218,   191,   192,   193,   194,   195,   196,   197
+      89,    89,    89,   113,    54,    54,    69,    89,   132,   101,
+     133,    40,   138,   139,   240,   200,    71,   143,   100,     2,
+      57,    58,   177,   174,   175,   116,   103,    39,    65,   109,
+     210,   144,   114,    53,    55,   119,   120,   131,    72,    73,
+     104,   127,    34,   110,   140,   141,   115,   118,   148,   134,
+     150,    74,   154,   155,    75,   156,   171,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   183,    39,   218,
+     -60,   220,   152,    76,   164,    89,   162,   180,   233,    46,
+      47,   129,   101,    90,   165,   235,   216,   217,   128,   111,
+     130,   100,    95,   173,   142,    46,    47,    81,    82,   103,
+     157,   145,   245,   202,   203,   204,   237,   144,    39,    48,
+      77,   186,   187,    78,   153,    79,    80,   201,   224,   206,
+     158,   199,   172,   217,   146,    48,   222,    46,   160,   161,
+      50,    89,   234,   207,   223,   151,   244,    51,   101,   229,
+      52,   159,   231,   238,   293,   166,    50,   100,   230,   120,
+     202,   203,   204,    51,   167,   103,    52,    48,   121,   260,
+     122,   123,   263,   264,   247,   248,   249,   122,   123,   252,
+     253,   254,   255,   256,   162,   163,    49,   178,    50,   176,
+      91,    92,   241,   181,   261,    66,    81,    82,    52,   182,
+     272,   272,   272,   272,   265,   266,    77,    91,    92,    78,
+     185,    79,    80,   314,   315,   283,   180,   180,   184,   294,
+      78,   278,    79,    80,   273,   273,   273,   273,    46,    47,
+      39,    71,    91,   262,   286,   291,   292,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,    46,    47,   188,
+     281,   208,   301,    91,    92,   209,   288,   306,    48,    81,
+      82,   300,   191,   192,   193,   194,   195,   196,   197,   198,
+     305,   211,    81,    82,   212,   135,   297,    48,   303,    50,
+     213,   114,   312,   215,   112,   214,    66,   225,   318,    52,
+     309,   226,   321,   196,   197,   198,   106,   107,    50,   284,
+     285,   269,   227,   228,   322,    51,   232,   236,    52,   237,
+     239,   328,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,     4,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   242,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,   243,   250,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    46,
+      47,   251,   257,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   274,   275,   276,   325,   258,    28,    29,
+      30,   259,   219,    31,   231,   270,    46,    47,   282,    48,
+      77,    46,    47,    78,   267,    79,    80,    91,    92,   268,
+     277,    93,    94,    81,    82,   279,   280,   287,    49,   290,
+      50,    46,    47,    46,    47,   289,    48,    66,    83,    95,
+      52,    48,    77,   295,   296,    78,   298,    79,    80,    91,
+      92,    46,    47,    93,    94,   168,   107,    50,   299,   302,
+      49,    48,    50,    48,    66,    46,    47,    52,   304,    66,
+     307,    95,    52,    46,    47,    81,    82,    46,    47,   310,
+      77,    48,    50,    78,    50,    79,    80,   311,   319,    51,
+     313,    51,    52,    83,    52,    48,   317,   320,   324,   326,
+      49,   169,    50,    48,   323,    77,   136,    48,    78,    51,
+      79,    80,    52,   246,    49,     0,    50,     0,    81,    82,
+       0,     0,     0,    66,    50,     0,    52,     0,    50,    39,
+       0,    51,     0,     0,    52,    66,     0,     0,    52,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,    77,
+       0,     0,    78,     0,    79,    80,   194,   195,   196,   197,
+     198,     0,    81,    82,     0,    36,    37,    38,     0,    41,
+      42,    43,    44,    45,     0,     0,    56,     0,    83,    59,
+      60,    61,    62,    63,    64,     0,    77,     0,     0,    78,
+       0,    79,    80,     0,     0,     0,     0,     0,   221,    81,
+      82,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     192,   193,   194,   195,   196,   197,   198,   202,   203,   204,
+      78,     0,    79,    80
 };
 
 static const yytype_int16 yycheck[] =
 {
-      35,    36,    37,     9,    43,    27,    92,    42,    58,   127,
-      37,     9,    18,    19,    59,    37,    61,    62,     9,    65,
-      26,    36,    44,    15,    16,   106,   107,    42,   110,     0,
-       6,     7,    38,     9,    56,    41,    60,    61,    44,    45,
-      63,    63,    64,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    62,   165,   166,    91,    55,   104,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,   115,
-     181,   144,    63,   146,    65,   110,    60,   112,    54,    61,
-      74,   163,    76,   110,     8,     9,   167,    62,   110,     3,
+      35,    36,    37,    43,    15,    16,    27,    42,    58,    37,
+      59,     9,    61,    62,     9,   128,    27,    65,    37,     0,
+      18,    19,   110,   106,   107,    44,    37,    63,    26,    40,
+       9,    66,    43,    15,    16,    46,    47,    56,    60,    61,
+      38,    52,    62,    41,    63,    64,    44,    45,    73,    60,
+      75,    60,     6,     7,    61,     9,   104,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,   115,    63,   147,
+      65,   149,    83,    62,    95,   110,    55,   112,   166,     8,
+       9,    66,   110,    36,    95,   168,   145,   146,    63,    42,
+      11,   110,    68,   104,    66,     8,     9,    52,    53,   110,
+      54,    66,   185,    39,    40,    41,    42,   142,    63,    38,
+      39,   122,   123,    42,    63,    44,    45,   128,   153,   130,
+      63,    67,   104,   182,    66,    38,   151,     8,     9,    10,
+      59,   166,   167,   131,   153,    66,   184,    66,   166,   158,
+      69,    66,    55,   178,   257,    63,    59,   166,   159,   160,
+      39,    40,    41,    66,    66,   166,    69,    38,     6,   208,
+       8,     9,   211,   212,   189,   190,   191,     8,     9,   194,
+     195,   196,   197,   198,    55,    56,    57,    63,    59,    66,
+      46,    47,   180,    63,   209,    66,    52,    53,    69,    66,
+     225,   226,   227,   228,   213,   214,    39,    46,    47,    42,
+       7,    44,    45,    48,    49,   240,   241,   242,    63,   259,
+      42,   232,    44,    45,   225,   226,   227,   228,     8,     9,
+      63,   232,    46,    47,   243,   250,   251,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,     8,     9,    66,
+     238,    63,   282,    46,    47,    63,   244,   296,    38,    52,
+      53,   270,     5,     6,     7,     8,     9,    10,    11,    12,
+     295,    63,    52,    53,    63,    68,   264,    38,   287,    59,
+      63,   282,   307,    67,    64,    63,    66,     6,   313,    69,
+     299,     7,   317,    10,    11,    12,    57,    58,    59,   241,
+     242,    67,     7,     7,   319,    66,    68,    66,    69,    42,
+      65,   326,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,     1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    64,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    63,     6,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,     8,
+       9,     7,    63,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,   226,   227,   228,    67,    67,    57,    58,
+      59,    63,    62,    62,    55,    63,     8,     9,    63,    38,
+      39,     8,     9,    42,    67,    44,    45,    46,    47,    67,
+      67,    50,    51,    52,    53,    67,    67,    63,    57,    67,
+      59,     8,     9,     8,     9,    66,    38,    66,    68,    68,
+      69,    38,    39,    63,    63,    42,    63,    44,    45,    46,
+      47,     8,     9,    50,    51,    57,    58,    59,    63,    65,
+      57,    38,    59,    38,    66,     8,     9,    69,    40,    66,
+      66,    68,    69,     8,     9,    52,    53,     8,     9,    67,
+      39,    38,    59,    42,    59,    44,    45,    63,    66,    66,
+      63,    66,    69,    68,    69,    38,    63,    63,    67,    63,
+      57,   104,    59,    38,   320,    39,    61,    38,    42,    66,
+      44,    45,    69,   188,    57,    -1,    59,    -1,    52,    53,
+      -1,    -1,    -1,    66,    59,    -1,    69,    -1,    59,    63,
+      -1,    66,    -1,    -1,    69,    66,    -1,    -1,    69,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    39,
-      40,    41,    42,   184,    52,    53,   141,    67,    63,     8,
-       9,    10,   104,    66,   149,    63,    39,    46,    47,    42,
-      11,    44,    45,    67,   130,    46,    47,   149,   163,   164,
-      68,     6,   154,     8,     9,    66,   163,   183,   256,    38,
-      63,   163,   177,   229,    46,    47,    66,    15,    16,   143,
-      52,    53,    42,    67,    44,    45,    55,    56,    57,    63,
-      59,    66,   207,    48,    49,   210,   211,    66,    63,    37,
-      69,    63,    40,   179,    63,    43,    46,    47,    46,    47,
-     240,   241,    52,    53,    52,    66,   221,   222,   223,   224,
-     212,   213,    60,    66,   188,   189,   190,    66,    68,   193,
-     194,   195,   196,   197,   239,   240,   241,    66,   258,    39,
-      40,    41,    80,    39,   208,    66,    42,    63,    44,    45,
-     242,    10,    11,    12,    92,    63,    52,    53,     7,    66,
-      63,   237,     8,     9,    63,    39,   104,   243,    42,    63,
-      44,    45,   110,   282,    63,   267,    63,    63,    52,    53,
-       6,   296,     7,   121,   122,   249,   250,   263,     7,   127,
-     295,   129,    38,    39,    68,   287,    42,     7,    44,    45,
-      46,    47,   307,    67,    50,    51,    68,   299,   313,    66,
-      42,    57,   317,    59,     1,    65,    64,   155,    63,   157,
-      66,     6,    68,    69,     7,   163,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      63,    63,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    39,    40,    41,    42,   319,    44,    45,     8,     9,
-      67,    55,   326,    39,    63,    67,    42,    67,    44,    45,
-      57,    58,    59,    63,    67,    62,    52,    53,    67,    63,
-       8,     9,    68,   221,   222,   223,   224,    63,    38,    39,
-      67,   229,    42,    66,    44,    45,    46,    47,     8,     9,
-      50,    51,    52,    53,   222,   223,   224,    57,    67,    59,
-      38,    63,     8,     9,    63,    63,    66,    40,    68,    69,
-       8,     9,    65,    67,    52,    53,    66,    63,    38,    39,
-      63,    59,    42,    63,    44,    45,    64,    66,    66,     8,
-       9,    69,    38,    63,   282,     8,     9,     8,     9,    59,
-      38,    67,    39,     8,     9,    42,    66,    44,    45,    69,
-      63,    57,    58,    59,    52,    53,   104,    61,   320,    38,
-      66,    59,   187,    69,    -1,    38,    -1,    38,    66,     8,
-       9,    69,    -1,    38,    -1,     8,     9,    -1,    57,    58,
-      59,     8,     9,    -1,    57,    -1,    59,    66,    59,    -1,
-      69,    -1,    57,    66,    59,    66,    69,    68,    69,    38,
-      -1,    66,    -1,    -1,    69,    38,     8,     9,    10,    11,
-      12,    38,    -1,    -1,    -1,    -1,    55,    -1,    -1,    -1,
-      59,    -1,    -1,    -1,    -1,    -1,    59,    66,    -1,    -1,
-      69,    -1,    59,    66,    -1,    -1,    69,    -1,    -1,    66,
-      -1,    -1,    69,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,     6,     7,     8,    -1,    10,    11,    12,
-      13,    14,    -1,    -1,    17,    -1,    -1,    20,    21,    22,
-      23,    24,    25,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    63,     5,     6,     7,     8,     9,    10,
-      11,    12,    62,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    62,     6,     7,     8,     9,    10,    11,    12
+      -1,    -1,    42,    -1,    44,    45,     8,     9,    10,    11,
+      12,    -1,    52,    53,    -1,     6,     7,     8,    -1,    10,
+      11,    12,    13,    14,    -1,    -1,    17,    -1,    68,    20,
+      21,    22,    23,    24,    25,    -1,    39,    -1,    -1,    42,
+      -1,    44,    45,    -1,    -1,    -1,    -1,    -1,    62,    52,
+      53,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+       6,     7,     8,     9,    10,    11,    12,    39,    40,    41,
+      42,    -1,    44,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -916,28 +916,28 @@ static const yytype_uint8 yystos[] =
       59,    62,    73,    76,    62,    77,    77,    77,    77,    63,
       78,    77,    77,    77,    77,    77,     8,     9,    38,    57,
       59,    66,    69,    99,   102,    99,    77,    78,    78,    77,
-      77,    77,    77,    77,    77,    78,    39,    42,    44,    45,
-      90,    94,    95,    60,    61,    60,    61,    62,    52,    53,
-      68,    88,    89,    90,    92,    95,    88,    46,    47,    50,
-      51,    66,    68,    80,    81,    83,    85,    86,    87,    90,
-      92,    98,    99,   102,    78,    78,    57,    58,    79,   102,
-      78,    88,    64,    86,   102,    78,    90,    78,   102,   102,
-       6,     8,     9,   100,   102,   104,   102,    63,    66,    11,
-      90,    80,    98,   102,    68,    81,    97,    98,    98,    90,
-      90,    66,    85,    66,    75,   104,    74,   104,   102,    63,
-       6,     7,     9,    54,    63,    66,    95,     9,    10,    55,
-      56,    87,   102,    63,    66,    66,    66,    57,    79,    84,
-      85,    99,   102,   100,   100,    66,    83,    63,    82,    95,
-      63,    66,    85,    63,     7,   102,   102,    66,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    67,    89,
-     102,    39,    40,    41,   101,   102,    78,    63,    63,     9,
-      63,    63,    63,    63,   104,    73,    62,    73,    62,    90,
-      95,     6,     7,     7,     7,    90,   102,    67,    55,    68,
-      83,    95,    94,    94,   100,    66,    42,    95,    65,     9,
-      78,    64,    63,    85,   100,   101,   104,   104,   104,     6,
-       7,   104,   104,   104,   104,   104,    63,    67,    63,    98,
-     104,    47,    98,    98,    90,    90,    67,    63,    93,    95,
-     102,    93,    93,    93,    67,    87,   102,    67,    67,    67,
+      77,    77,    77,    77,    77,    78,    66,    85,    86,    87,
+      99,   102,    60,    61,    60,    61,    62,    39,    42,    44,
+      45,    52,    53,    68,    88,    89,    90,    92,    94,    95,
+      88,    46,    47,    50,    51,    68,    80,    81,    83,    87,
+      90,    92,    98,   102,    78,    78,    57,    58,    79,   102,
+      78,    88,    64,    86,   102,    78,    90,    95,    78,   102,
+     102,     6,     8,     9,   100,   102,   104,   102,    63,    66,
+      11,    90,    80,    98,   102,    68,    81,    97,    98,    98,
+      90,    90,    66,    85,    95,    66,    66,    75,   104,    74,
+     104,    66,   102,    63,     6,     7,     9,    54,    63,    66,
+       9,    10,    55,    56,    87,   102,    63,    66,    57,    79,
+      84,    85,    99,   102,   100,   100,    66,    83,    63,    82,
+      95,    63,    66,    85,    63,     7,   102,   102,    66,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    67,
+      89,   102,    39,    40,    41,   101,   102,    78,    63,    63,
+       9,    63,    63,    63,    63,    67,    94,    94,    73,    62,
+      73,    62,   104,    90,    95,     6,     7,     7,     7,    90,
+     102,    55,    68,    83,    95,   100,    66,    42,    95,    65,
+       9,    78,    64,    63,    85,   100,   101,   104,   104,   104,
+       6,     7,   104,   104,   104,   104,   104,    63,    67,    63,
+      98,   104,    47,    98,    98,    90,    90,    67,    67,    67,
+      63,    93,    95,   102,    93,    93,    93,    67,    87,    67,
       67,    78,    63,    95,    82,    82,    90,    63,    78,    66,
       67,   104,   104,    89,    80,    63,    63,    78,    63,    63,
       90,    86,    65,    90,    40,    95,    98,    66,    91,    90,
@@ -2097,7 +2097,6 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 308 "a.y"
     {
-               // TODO
                outcode((yyvsp[(1) - (2)].lval), Always, &(yyvsp[(2) - (2)].gen), NREG, &nullgen);
        }
     break;
@@ -2105,7 +2104,7 @@ yyreduce:
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 316 "a.y"
+#line 315 "a.y"
     {
                outcode((yyvsp[(1) - (2)].lval), Always, &nullgen, NREG, &nullgen);
        }
@@ -2114,7 +2113,7 @@ yyreduce:
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 321 "a.y"
+#line 320 "a.y"
     {
                (yyval.lval) = Always;
        }
@@ -2123,7 +2122,7 @@ yyreduce:
   case 46:
 
 /* Line 1455 of yacc.c  */
-#line 325 "a.y"
+#line 324 "a.y"
     {
                (yyval.lval) = ((yyvsp[(1) - (2)].lval) & ~C_SCOND) | (yyvsp[(2) - (2)].lval);
        }
@@ -2132,7 +2131,7 @@ yyreduce:
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 329 "a.y"
+#line 328 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (2)].lval) | (yyvsp[(2) - (2)].lval);
        }
@@ -2141,7 +2140,7 @@ yyreduce:
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 338 "a.y"
+#line 337 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_BRANCH;
@@ -2152,7 +2151,7 @@ yyreduce:
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 344 "a.y"
+#line 343 "a.y"
     {
                (yyval.gen) = nullgen;
                if(pass == 2)
@@ -2166,7 +2165,7 @@ yyreduce:
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 353 "a.y"
+#line 352 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_BRANCH;
@@ -2178,7 +2177,7 @@ yyreduce:
   case 53:
 
 /* Line 1455 of yacc.c  */
-#line 361 "a.y"
+#line 360 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_CONST;
@@ -2189,7 +2188,7 @@ yyreduce:
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 367 "a.y"
+#line 366 "a.y"
     {
                (yyval.gen) = (yyvsp[(2) - (2)].gen);
                (yyval.gen).type = D_CONST;
@@ -2199,7 +2198,7 @@ yyreduce:
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 372 "a.y"
+#line 371 "a.y"
     {
                (yyval.gen) = (yyvsp[(4) - (4)].gen);
                (yyval.gen).type = D_OCONST;
@@ -2209,7 +2208,7 @@ yyreduce:
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 377 "a.y"
+#line 376 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SCONST;
@@ -2220,7 +2219,7 @@ yyreduce:
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 386 "a.y"
+#line 385 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FCONST;
@@ -2231,7 +2230,7 @@ yyreduce:
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 392 "a.y"
+#line 391 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FCONST;
@@ -2242,7 +2241,7 @@ yyreduce:
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 400 "a.y"
+#line 399 "a.y"
     {
                (yyval.lval) = 1 << (yyvsp[(1) - (1)].lval);
        }
@@ -2251,7 +2250,7 @@ yyreduce:
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 404 "a.y"
+#line 403 "a.y"
     {
                int i;
                (yyval.lval)=0;
@@ -2265,7 +2264,7 @@ yyreduce:
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 413 "a.y"
+#line 412 "a.y"
     {
                (yyval.lval) = (1<<(yyvsp[(1) - (3)].lval)) | (yyvsp[(3) - (3)].lval);
        }
@@ -2274,7 +2273,7 @@ yyreduce:
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 422 "a.y"
+#line 421 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (4)].gen);
                (yyval.gen).reg = (yyvsp[(3) - (4)].lval);
@@ -2284,7 +2283,7 @@ yyreduce:
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 427 "a.y"
+#line 426 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_PSR;
@@ -2295,7 +2294,7 @@ yyreduce:
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 433 "a.y"
+#line 432 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FPCR;
@@ -2306,7 +2305,7 @@ yyreduce:
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 439 "a.y"
+#line 438 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2317,7 +2316,7 @@ yyreduce:
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 450 "a.y"
+#line 449 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (1)].gen);
                if((yyvsp[(1) - (1)].gen).name != D_EXTERN && (yyvsp[(1) - (1)].gen).name != D_STATIC) {
@@ -2328,7 +2327,7 @@ yyreduce:
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 458 "a.y"
+#line 457 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2340,7 +2339,7 @@ yyreduce:
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 468 "a.y"
+#line 467 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2352,7 +2351,7 @@ yyreduce:
   case 78:
 
 /* Line 1455 of yacc.c  */
-#line 478 "a.y"
+#line 477 "a.y"
     {
                (yyval.gen) = (yyvsp[(1) - (4)].gen);
                (yyval.gen).type = D_OREG;
@@ -2363,7 +2362,7 @@ yyreduce:
   case 83:
 
 /* Line 1455 of yacc.c  */
-#line 491 "a.y"
+#line 490 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_CONST;
@@ -2374,7 +2373,7 @@ yyreduce:
   case 84:
 
 /* Line 1455 of yacc.c  */
-#line 499 "a.y"
+#line 498 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_REG;
@@ -2385,7 +2384,7 @@ yyreduce:
   case 85:
 
 /* Line 1455 of yacc.c  */
-#line 507 "a.y"
+#line 506 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_REGREG;
@@ -2397,7 +2396,7 @@ yyreduce:
   case 86:
 
 /* Line 1455 of yacc.c  */
-#line 516 "a.y"
+#line 515 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2408,7 +2407,7 @@ yyreduce:
   case 87:
 
 /* Line 1455 of yacc.c  */
-#line 522 "a.y"
+#line 521 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2419,7 +2418,7 @@ yyreduce:
   case 88:
 
 /* Line 1455 of yacc.c  */
-#line 528 "a.y"
+#line 527 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2430,7 +2429,7 @@ yyreduce:
   case 89:
 
 /* Line 1455 of yacc.c  */
-#line 534 "a.y"
+#line 533 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_SHIFT;
@@ -2441,7 +2440,7 @@ yyreduce:
   case 90:
 
 /* Line 1455 of yacc.c  */
-#line 542 "a.y"
+#line 541 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= 16)
                        print("register value out of range\n");
@@ -2452,7 +2451,7 @@ yyreduce:
   case 91:
 
 /* Line 1455 of yacc.c  */
-#line 548 "a.y"
+#line 547 "a.y"
     {
                if((yyval.lval) < 0 || (yyval.lval) >= 32)
                        print("shift value out of range\n");
@@ -2463,7 +2462,7 @@ yyreduce:
   case 93:
 
 /* Line 1455 of yacc.c  */
-#line 557 "a.y"
+#line 556 "a.y"
     {
                (yyval.lval) = REGPC;
        }
@@ -2472,7 +2471,7 @@ yyreduce:
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 561 "a.y"
+#line 560 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range\n");
@@ -2483,7 +2482,7 @@ yyreduce:
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 570 "a.y"
+#line 569 "a.y"
     {
                (yyval.lval) = REGSP;
        }
@@ -2492,7 +2491,7 @@ yyreduce:
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 577 "a.y"
+#line 576 "a.y"
     {
                if((yyvsp[(3) - (4)].lval) < 0 || (yyvsp[(3) - (4)].lval) >= NREG)
                        print("register value out of range\n");
@@ -2503,7 +2502,7 @@ yyreduce:
   case 101:
 
 /* Line 1455 of yacc.c  */
-#line 589 "a.y"
+#line 588 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FREG;
@@ -2514,7 +2513,7 @@ yyreduce:
   case 102:
 
 /* Line 1455 of yacc.c  */
-#line 595 "a.y"
+#line 594 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_FREG;
@@ -2525,7 +2524,7 @@ yyreduce:
   case 103:
 
 /* Line 1455 of yacc.c  */
-#line 603 "a.y"
+#line 602 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2538,7 +2537,7 @@ yyreduce:
   case 104:
 
 /* Line 1455 of yacc.c  */
-#line 611 "a.y"
+#line 610 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2551,7 +2550,7 @@ yyreduce:
   case 105:
 
 /* Line 1455 of yacc.c  */
-#line 619 "a.y"
+#line 618 "a.y"
     {
                (yyval.gen) = nullgen;
                (yyval.gen).type = D_OREG;
@@ -2564,7 +2563,7 @@ yyreduce:
   case 106:
 
 /* Line 1455 of yacc.c  */
-#line 628 "a.y"
+#line 627 "a.y"
     {
                (yyval.lval) = 0;
        }
@@ -2573,7 +2572,7 @@ yyreduce:
   case 107:
 
 /* Line 1455 of yacc.c  */
-#line 632 "a.y"
+#line 631 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
@@ -2582,7 +2581,7 @@ yyreduce:
   case 108:
 
 /* Line 1455 of yacc.c  */
-#line 636 "a.y"
+#line 635 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
@@ -2591,7 +2590,7 @@ yyreduce:
   case 113:
 
 /* Line 1455 of yacc.c  */
-#line 648 "a.y"
+#line 647 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (1)].sym)->value;
        }
@@ -2600,7 +2599,7 @@ yyreduce:
   case 114:
 
 /* Line 1455 of yacc.c  */
-#line 652 "a.y"
+#line 651 "a.y"
     {
                (yyval.lval) = -(yyvsp[(2) - (2)].lval);
        }
@@ -2609,7 +2608,7 @@ yyreduce:
   case 115:
 
 /* Line 1455 of yacc.c  */
-#line 656 "a.y"
+#line 655 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
@@ -2618,7 +2617,7 @@ yyreduce:
   case 116:
 
 /* Line 1455 of yacc.c  */
-#line 660 "a.y"
+#line 659 "a.y"
     {
                (yyval.lval) = ~(yyvsp[(2) - (2)].lval);
        }
@@ -2627,7 +2626,7 @@ yyreduce:
   case 117:
 
 /* Line 1455 of yacc.c  */
-#line 664 "a.y"
+#line 663 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (3)].lval);
        }
@@ -2636,7 +2635,7 @@ yyreduce:
   case 118:
 
 /* Line 1455 of yacc.c  */
-#line 669 "a.y"
+#line 668 "a.y"
     {
                (yyval.lval) = 0;
        }
@@ -2645,7 +2644,7 @@ yyreduce:
   case 119:
 
 /* Line 1455 of yacc.c  */
-#line 673 "a.y"
+#line 672 "a.y"
     {
                (yyval.lval) = (yyvsp[(2) - (2)].lval);
        }
@@ -2654,7 +2653,7 @@ yyreduce:
   case 121:
 
 /* Line 1455 of yacc.c  */
-#line 680 "a.y"
+#line 679 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) + (yyvsp[(3) - (3)].lval);
        }
@@ -2663,7 +2662,7 @@ yyreduce:
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 684 "a.y"
+#line 683 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) - (yyvsp[(3) - (3)].lval);
        }
@@ -2672,7 +2671,7 @@ yyreduce:
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 688 "a.y"
+#line 687 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) * (yyvsp[(3) - (3)].lval);
        }
@@ -2681,7 +2680,7 @@ yyreduce:
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 692 "a.y"
+#line 691 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) / (yyvsp[(3) - (3)].lval);
        }
@@ -2690,7 +2689,7 @@ yyreduce:
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 696 "a.y"
+#line 695 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) % (yyvsp[(3) - (3)].lval);
        }
@@ -2699,7 +2698,7 @@ yyreduce:
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 700 "a.y"
+#line 699 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) << (yyvsp[(4) - (4)].lval);
        }
@@ -2708,7 +2707,7 @@ yyreduce:
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 704 "a.y"
+#line 703 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (4)].lval) >> (yyvsp[(4) - (4)].lval);
        }
@@ -2717,7 +2716,7 @@ yyreduce:
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 708 "a.y"
+#line 707 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) & (yyvsp[(3) - (3)].lval);
        }
@@ -2726,7 +2725,7 @@ yyreduce:
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 712 "a.y"
+#line 711 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) ^ (yyvsp[(3) - (3)].lval);
        }
@@ -2735,7 +2734,7 @@ yyreduce:
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 716 "a.y"
+#line 715 "a.y"
     {
                (yyval.lval) = (yyvsp[(1) - (3)].lval) | (yyvsp[(3) - (3)].lval);
        }
@@ -2744,7 +2743,7 @@ yyreduce:
 
 
 /* Line 1455 of yacc.c  */
-#line 2748 "y.tab.c"
+#line 2747 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 3a905f0997bff554c43a44e2c1002113395461c0..cdfb9d7f6948665bfa4ec2f3518e21a417622450 100644 (file)
@@ -1067,6 +1067,7 @@ copyu(Prog *p, Adr *v, Adr *s)
        case ABLT:
        case ABGT:
        case ABLE:
+       case APLD:
                if(s != A) {
                        if(copysub(&p->from, v, s, 1))
                                return 1;
index 1ccf74a35deba853b927d51d6b60d84ff637474b..7cd880b9bf0cf4375ee15ef7519cad55521bd076 100644 (file)
@@ -190,6 +190,14 @@ regopt(Prog *p)
                                r->set.b[z] |= bit.b[z];
                        break;
 
+               /*
+                * right side read
+                */
+               case APLD:
+                       for(z=0; z<BITS; z++)
+                               r->use2.b[z] |= bit.b[z];
+                       break;
+
                /*
                 * funny
                 */
index ee341905d57740776483ae2ad34ac7163935eec4..7738de1c308e451898e505b4d4e3d079d1f854e3 100644 (file)
@@ -1197,7 +1197,13 @@ gpseudo(int a, Sym *s, Node *n)
 void
 gprefetch(Node *n)
 {
-       // nothing
+       Node n1;
+
+       regalloc(&n1, n, Z);
+       gmove(n, &n1);
+       n1.op = OINDREG;
+       gins(APLD, &n1, Z);
+       regfree(&n1);
 }
 
 int
index 099c4208cd6e089eca9e6b10e606df8c6955ef35..538e2c54c5acb5677d6d1c14707f4b0c8820dc16 100644 (file)
@@ -1429,9 +1429,14 @@ if(debug['G']) print("%ux: %s: arm %d\n", (uint32)(p->pc), p->from.sym->name, p-
                        break;
                o2 = oshr(p->from.reg, 0, REGTMP, p->scond);
                break;
-       case 95:        /* PLD reg */
+       case 95:        /* PLD off(reg) */
                o1 = 0xf5d0f000;
                o1 |= p->from.reg << 16;
+               if(p->from.offset < 0) {
+                       o1 &= ~(1 << 23);
+                       o1 |= (-p->from.offset) & 0xfff;
+               } else
+                       o1 |= p->from.offset & 0xfff;
        }
        
        out[0] = o1;
index 92e38cd9317f7005ca3f4aee00903560e07168a8..76f2d4dda54e1007bdbcc6a0278aa3e2e6cfc4c8 100644 (file)
@@ -232,7 +232,7 @@ Optab       optab[] =
        { ALDREXD,      C_SOREG,C_NONE, C_REG,          91, 4, 0 },
        { ASTREXD,      C_SOREG,C_REG,  C_REG,          92, 4, 0 },
 
-       { APLD,         C_REG,  C_NONE, C_NONE,         95, 4, 0 },
+       { APLD,         C_SOREG,C_NONE, C_NONE,         95, 4, 0 },
 
        { AXXX,         C_NONE, C_NONE, C_NONE,          0, 4, 0 },
 };