Tax-deductible BSD Funding
BSD Fund Logo BSD Beastie

Portable C Compiler Fund

BSD Fund has partnered with software engineer and researcher Anders Magnusson to bring the Portable C Compiler "pcc" to 1.0 release status. Originally written by Stephen C. Johnson of Bell Labs in the 1970's, pcc is today valued by developers for its speed, simplicity, BSD license and of course, portability. Mr. Magnusson has worked with pcc since 2002 and been project maintainer since 2007.

Success! $12,472 raised!

On April 28th, an anonymous donor made a $1,000 donation to this project in honor of the OpenBSD Project, bringing us solidly past our fundraising target.

Anders reports that he is making good progress and should have yet more code to test shortly. The latest commits can be seen online.

Our sincere thanks to everyone who participated in this effort and we look forward to the 1.0 release and continued improvement of pcc!

Michael Dexter

BSD Fund Program Manager

Work description

Improved Static Single Assignment form conversion functionality

Convert the expression trees in a function to SSA form and back.
SSA form conversions require:

  • Creating the Control-Flow Graph (CFG)
  • Building a dominator tree
  • Calculating the dominance frontiers
  • Inserting phi functions
  • Renumbering temporary variables

Improved C99 functionality

  • Improved complex numbers: Support the _Complex and _Imaginary data types introduced in C99.
  • Improved dynamic arrays in function headers/prototypes: Support exists for automatic dynamic arrays but not yet fixed for function headers/prototypes.
  • Improved abstract dynamic declarations: Support the ability to use abstract declarators everywhere allowed.

Improved GCC compatibility

  • attribute(): Support parsing of the attribute() syntax and test for commonly used extensions.
  • typeof(): Support the typeof() keyword.
  • Case number ranges: Support giving number ranges to case statements.
  • Incomplete Enums: Support forward declaration of enums.
  • Unnamed struct/union fields: Support the use of unnamed members compatible with both GCC and the historical use of it.

AMD64 Port

Port the Portable C Compiler to the AMD64 architecture.

  • Implement code generation
  • Implement FPU code generation
  • Implement fPIC code generation

Progress

Watch for completed tasks above and you can watch commits here.

Future Work

Upon completion and community acceptance of this work, BSD Fund will consider a pcc roadmap that specifies additional features and architecture ports, plus external toolchain components such as an assembler and linker.

Budget

SSA Conversions: $2,900
C99 Improvements: $4,800
GCC Improvements: $1,900
AMD64 Support: $2,400

Total donations needed to complete this work: $12,000
Donations received to date: $12,472
Remaining donations needed: $0


Progress Thermometer

On-line donations between $20 and $1000 have the lowest fees.

Donate with Google Checkout


Amount: $

Donate with PayPal


Amount: $

Donate by Check, Money Order or BillPay

Donations by check can be addressed to "BSD Fund" and mailed to:

BSD Fund
560 SE Alexander Ave
Corvallis OR 97333-1933
USA

Please include "pcc Fund" on the check plus your e-mail address so we can send you a receipt for tax purposes.

Contribute a Donor

If you are already contributing code or have a limited budget, a referral to a sympathetic employer or philanthropist can be priceless. Such potential donors can contact dexter at bsdfund dot org for more information about this and other BSD Fund efforts.


BSD Fund is a 501(c)(3) non-profit organization and donations are tax-deductible within the limitations of U.S. federal income tax laws. We will e-mail US taxpayers a receipt using the information provided by Google Checkout or PayPal. Please e-mail donations at bsdfund dot org if you have any questions.

BSD Fund is a DBA of Linux Fund, Inc.
EIN: 93-1275966 - IRS 501(c)(3) effective 9/29/2006

More information about the pcc project can be found at the pcc home page.

Copyright © 2007 – 2009 BSD Fund. All rights reserved.
BSD Daemon used with permission.