Re: 0xdeadbeef vs 0xdeadbeefL

From: David Eger
Date: Tue Jul 06 2004 - 23:53:44 EST


On Tue, Jul 06, 2004 at 08:38:53PM -0400, Richard B. Johnson wrote:
> On Tue, 6 Jul 2004, David Eger wrote:
>
> > Is there a reason to add the 'L' to such a 32-bit constant like this?
> > There doesn't seem a great rhyme to it in the headers...
>
> Well if you put the 'name' so we could search for the reason.....

The reason I ask is that I'm going on a cleaning spree of

include/video/radeon.h

I was trying to debug my code figuring out which flags we were
setting in GMC_GUI_MASTER_CNTL. Now radeon.h does have lots of
#defines for what the bits mean, but they're all mixed up, e.g.:

#define GMC_DP_CONVERSION_TEMP_6500 0x00000000
#define GMC_DP_SRC_RECT 0x02000000
#define GMC_DP_SRC_HOST 0x03000000
#define GMC_DP_SRC_HOST_BYTEALIGN 0x04000000
#define GMC_3D_FCN_EN_CLR 0x00000000
#define GMC_3D_FCN_EN_SET 0x08000000
#define GMC_DST_CLR_CMP_FCN_LEAVE 0x00000000
#define GMC_DST_CLR_CMP_FCN_CLEAR 0x10000000
#define GMC_AUX_CLIP_LEAVE 0x00000000
#define GMC_AUX_CLIP_CLEAR 0x20000000
#define GMC_WRITE_MASK_LEAVE 0x00000000
#define GMC_WRITE_MASK_SET 0x40000000
#define GMC_CLR_CMP_CNTL_DIS (1 << 28)
#define GMC_SRC_DATATYPE_COLOR (3 << 12)
#define ROP3_S 0x00cc0000
#define ROP3_SRCCOPY 0x00cc0000
#define ROP3_P 0x00f00000
#define ROP3_PATCOPY 0x00f00000
#define DP_SRC_SOURCE_MASK (7 << 24)
#define GMC_BRUSH_NONE (15 << 4)
#define DP_SRC_SOURCE_MEMORY (2 << 24)
#define GMC_BRUSH_SOLIDCOLOR 0x000000d0

This mish-mash makes it impossible to grep for '0x00f0' or
'0x000000f0' and get the answer I want, as GMC_BRUSH_NONE isn't
listed in such a form. So I wrote a little script to standardize
the file, and I noticed that in other sections, we have #defines
like these:

// CLK_PIN_CNTL
#define CLK_PIN_CNTL__OSC_EN_MASK 0x00000001L
#define CLK_PIN_CNTL__OSC_EN 0x00000001L
#define CLK_PIN_CNTL__XTL_LOW_GAIN_MASK 0x00000004L
#define CLK_PIN_CNTL__XTL_LOW_GAIN 0x00000004L
#define CLK_PIN_CNTL__DONT_USE_XTALIN_MASK 0x00000010L
#define CLK_PIN_CNTL__DONT_USE_XTALIN 0x00000010L

As part of the standardization, my script strips the 'L' off
of the constant. (It's the output of 'eval()'ing the #define in
Python.) I was really just wondering if this would break anyone's
code.

Invocation goes like this:

$ (stdlbdef.py | upsidedown.py | stdlbdef.py | upsidedown.py ) < radeon.h > radeon.h.2

Then all of the simple arithmetic #define's are aligned to a uniform
width of hex value within each block of #define's.

-dte

#!/usr/bin/python
#
# stdlbdef.py
#
# Got a header file where someone has mixed up their constants
# willy-nilly, like this?
#
#define GMC_AUX_CLIP_LEAVE 0x00000000
#define GMC_AUX_CLIP_CLEAR 0x20000000
#define GMC_WRITE_MASK_LEAVE 0x00000000
#define GMC_WRITE_MASK_SET 0x40000000
#define GMC_CLR_CMP_CNTL_DIS (1 << 28)
#define GMC_SRC_DATATYPE_COLOR (3 << 12)
#
# This script will make them all nice constants... mmmm..

import string
import re
import sys

linesplitter = re.compile("^(?P<a>#define\s+[a-zA-Z0-9_]+\s+)(?P<b>.*)")
hexnum = re.compile("^0[xX][0-9a-fA-F]+$")

l = sys.stdin.readline()
lastsize = 2

while l:
ma = linesplitter.search(l,0)
if ma and ma.group("b"):
exp = ma.group("b").rstrip()
# process the line
if hexnum.match(exp,0) and len(exp) >= lastsize:
lastsize = len(exp)
sys.stdout.write( l )
else:
try:
num = eval(exp)
q = '0x%x' % num
if len(q) < lastsize:
fs = '0x%%0%dx' % (lastsize - 2)
q = fs % num
lastsize = len(q)
sys.stdout.write( '%s%s\n' % (ma.group("a"), q))
except:
sys.stdout.write( l )
else:
sys.stdout.write( l )
lastsize = 2
l = sys.stdin.readline()


#!/usr/bin/python
#
# upsidedown.py
#
# prints out a file, line by line, starting with the last line,
# going to the first

import sys
l = sys.stdin.readlines()
l.reverse()
for i in l:
sys.stdout.write(i)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/