diff --git a/binutils/mclex.c b/binutils/mclex.c
index 2f0e144..f31eadd 100644
--- a/binutils/mclex.c
+++ b/binutils/mclex.c
@@ -324,6 +324,13 @@ mc_token (const unichar *t, size_t len)
   return -1;
 }
 
+static unichar 
+le16u(unichar x) 
+{
+  unsigned char *puc = (unsigned char *)(&x);
+  return (puc[0] << 0) | (puc[1] << 8);
+}
+
 int
 yylex (void)
 {
@@ -338,25 +345,25 @@ yylex (void)
   if (mclex_want_line)
     {
       start_token = input_stream_pos;
-      if (input_stream_pos[0] == '.'
-	  && (input_stream_pos[1] == '\n'
-	      || (input_stream_pos[1] == '\r' && input_stream_pos[2] == '\n')))
+      if (le16u(input_stream_pos[0]) == '.'
+	  && (le16u(input_stream_pos[1]) == '\n'
+	      || (le16u(input_stream_pos[1]) == '\r' && le16u(input_stream_pos[2]) == '\n')))
       {
 	mclex_want_line = FALSE;
-	while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
+	while (le16u(input_stream_pos[0]) != 0 && le16u(input_stream_pos[0]) != '\n')
 	  ++input_stream_pos;
-	if (input_stream_pos[0] == '\n')
+	if (le16u(input_stream_pos[0]) == '\n')
 	  ++input_stream_pos;
 	return MCENDLINE;
       }
-      while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
+      while (le16u(input_stream_pos[0]) != 0 && le16u(input_stream_pos[0]) != '\n')
 	++input_stream_pos;
-      if (input_stream_pos[0] == '\n')
+      if (le16u(input_stream_pos[0]) == '\n')
 	++input_stream_pos;
       yylval.ustr = get_diff (input_stream_pos, start_token);
       return MCLINE;
     }
-  while ((ch = input_stream_pos[0]) <= 0x20)
+  while ((ch = le16u(input_stream_pos[0])) <= 0x20)
     {
       if (ch == 0)
 	return -1;
@@ -377,7 +384,7 @@ yylex (void)
       if (ch == '"')
 	{
 	  start_token++;
-	  while ((ch = input_stream_pos[0]) != 0)
+	  while ((ch = le16u(input_stream_pos[0])) != 0)
 	    {
 	      if (ch == '"')
 		break;
@@ -389,7 +396,7 @@ yylex (void)
 	}
       else
 	{
-	  while ((ch = input_stream_pos[0]) != 0)
+	  while ((ch = le16u(input_stream_pos[0])) != 0)
 	    {
 	      if (ch <= 0x20 || ch == ')')
 		break;
@@ -403,9 +410,9 @@ yylex (void)
   {
   case ';':
     ++start_token;
-    while (input_stream_pos[0] != '\n' && input_stream_pos[0] != 0)
+    while (le16u(input_stream_pos[0]) != '\n' && le16u(input_stream_pos[0]) != 0)
       ++input_stream_pos;
-    if (input_stream_pos[0] == '\n')
+    if (le16u(input_stream_pos[0]) == '\n')
       input_stream_pos++;
     yylval.ustr = get_diff (input_stream_pos, start_token);
     return MCCOMMENT;
@@ -427,7 +434,7 @@ yylex (void)
     if (ch >= 0x40)
       {
 	int ret;
-	while (input_stream_pos[0] >= 0x40 || (input_stream_pos[0] >= '0' && input_stream_pos[0] <= '9'))
+	while (le16u(input_stream_pos[0]) >= 0x40 || (le16u(input_stream_pos[0]) >= '0' && le16u(input_stream_pos[0]) <= '9'))
 	  ++input_stream_pos;
 	ret = mc_token (start_token, (size_t) (input_stream_pos - start_token));
 	if (ret != -1)
