Thread View: comp.bugs.2bsd
1 messages
1 total messages
Started by Steven M. Schultz
Wed, 02 Sep 1992 20:52
C compiler (/lib/c1) u_char improvement (#77)
Author: Steven M. Schultz
Date: Wed, 02 Sep 1992 20:52
Date: Wed, 02 Sep 1992 20:52
89 lines
2029 bytes
2029 bytes
Subject: C compiler (/lib/c1) u_char improvement (#77)
Index: lib/ccom/optable 2.11BSD
Description:
The C compiler doesn't know it can use the same 'bitb' instructions
for u_char as it can for char. This results in extra instructions
being generated to promote the u_char to int before doing a 'bit'.
This type of construct occurs fairly frequently in the networking
code because various flag fields are u_char in type.
Repeat-By:
Compile the test program (using "cc -O -S"):
char *b;
unsigned char *c;
main()
{
if ((b[1] & 4) == 0)
exit(2);
if ((c[1] & 4) == 0)
exit(1);
}
Note that the code reads:
.comm _b,2
.comm _c,2
.globl _main
.text
_main:
~~main:
jsr r5,csv
mov _b,r0
bitb $4,1(r0)
jne L4
mov $2,(sp)
jsr pc,*$_exit
L4: mov _c,r0
movb 1(r0),r0 /* XXX */
bic $!377,r0 /* XXX */
bit $4,r0
jne L3
mov $1,(sp)
jsr pc,*$_exit
L3: jmp cret
.globl
.data
Instead of:
.comm _b,2
.comm _c,2
.globl _main
.text
_main:
~~main:
jsr r5,csv
mov _b,r0
bitb $4,1(r0)
jne L4
mov $2,(sp)
jsr pc,*$_exit
L4: mov _c,r0
bitb $4,1(r0)
jne L3
mov $1,(sp)
jsr pc,*$_exit
L3: jmp cret
.globl
.data
Fix:
Apply the patch below and reinstall 'c1'.
==============================cut here==============================
*** /usr/src/lib/ccom/optable.old Wed Oct 23 07:02:57 1991
--- /usr/src/lib/ccom/optable Tue Jul 28 09:35:00 1992
***************
*** 1839,1844 ****
--- 1839,1846 ----
IBE R,A1
%n*,a
+ %nu*,a
+ %nub*,a
% [move6]
%n,a
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads