Chris, I don't think that this is portable. This assumes that both the host and the PTH file encode integers in little endian format.
On Jan 20, 2009, at 11:06 PM, Chris Lattner wrote: > Author: lattner > Date: Wed Jan 21 01:06:08 2009 > New Revision: 62668 > > URL: http://llvm.org/viewvc/llvm-project?rev=62668&view=rev > Log: > minor cleanups: now that tokens are 4-byte aligned in a PTH > file, just load them directly as ints. > > Modified: > cfe/trunk/lib/Lex/PTHLexer.cpp > > Modified: cfe/trunk/lib/Lex/PTHLexer.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PTHLexer.cpp?rev=62668&r1=62667&r2=62668&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/Lex/PTHLexer.cpp (original) > +++ cfe/trunk/lib/Lex/PTHLexer.cpp Wed Jan 21 01:06:08 2009 > @@ -50,22 +50,6 @@ > return V; > } > > -static inline uint32_t Read24(const unsigned char *&Data) { > -// Targets that directly support unaligned little-endian 16-bit > loads can just > -// use them. > -#if defined(__i386__) || defined(__x86_64__) > - uint32_t V = ((uint16_t*)Data)[0] | > - ((uint32_t)Data[2] << 16); > -#else > - uint32_t V = ((uint32_t)Data[0] << 0) | > - ((uint32_t)Data[1] << 8) | > - ((uint32_t)Data[2] << 16); > -#endif > - > - Data += 3; > - return V; > -} > - > static inline uint32_t Read32(const unsigned char *&Data) { > // Targets that directly support unaligned little-endian 32-bit > loads can just > // use them. > @@ -104,18 +88,18 @@ > //===--------------------------------------==// > > // Shadow CurPtr into an automatic variable. > - const unsigned char *CurPtrShadow = CurPtr; > + const unsigned *CurPtrShadow = (const unsigned *)CurPtr; > > // Read in the data for the token. > - unsigned Word0 = Read32(CurPtrShadow); > - uint32_t IdentifierID = Read32(CurPtrShadow); > - uint32_t FileOffset = Read32(CurPtrShadow); > + unsigned Word0 = CurPtrShadow[0]; > + unsigned IdentifierID = CurPtrShadow[1]; > + unsigned FileOffset = CurPtrShadow[2]; > > tok::TokenKind TKind = (tok::TokenKind) (Word0 & 0xFF); > Token::TokenFlags TFlags = (Token::TokenFlags) ((Word0 >> 8) & > 0xFF); > - uint32_t Len = Word0 >> 16; > + unsigned Len = Word0 >> 16; > > - CurPtr = CurPtrShadow; > + CurPtr = (const unsigned char*)(CurPtrShadow+3); > > //===--------------------------------------==// > // Construct the token itself. > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
