Thread (6 messages) flat view 6 messages, 2 authors, 2003-02-05

Re: writing to a floating point register ?

From: Sven Luther <hidden>
Date: 2003-02-05 11:02:43

On Wed, Feb 05, 2003 at 11:44:23AM +0100, Geert Uytterhoeven wrote:
On Wed, 5 Feb 2003, Sven Luther wrote:
quoted
On Wed, Feb 05, 2003 at 11:28:58AM +0100, Geert Uytterhoeven wrote:
quoted
On Wed, 5 Feb 2003, Sven Luther wrote:
quoted
while writing a fbdev driver, i need to write a value to a floating
point register. Do we have any macro doing this, or should i need to
calculate the sign, mantissa and exponent by hand ?

Just doing a unsigned int cast would round the value i think, and thus
not give the right result.
You cannot use floating point math in the kernel.

What exactly are you trying to achieve?
Well, my framebuffer is not linear, and i have to enable a bypass unit
to fake a linear framebuffer. This bypass unit need that i write the
bytestride/64 32bit floating point value in a register.

for example : 1024 in 32 bpp => 4*1024/64 = 64.

64 is 0100 0000 or 1.0 * 2^6.

So i have sign = 0, exp = 127+6=133 = 10000101, and mantissa = 0.

which gives 0100 0010 1000 0000 ... or 0x42 80 00 00.

I was hoping that i would not need to do this calculation by hand, but i
guess it is not possible, since like you said, we cannot use the FP
unit in the kernel.
Even if you could, it would work for 32-bit IEEE floating point format only.
Is the hardware register format IEEE compatible.
Mmm, sure, didn't think of this. Would endianess and other such issue 
not be a problem for this kind of calculation ? Would it make sense to
have a special macro available for this kind of thing, like we have for
writing 8, 16 or 32 bits ?
Anyway, the calculation is not that difficult.
Sure ...
Perhaps you can even restrict line_length to be a multiple of 64 in all cases,
in which case it's even made more easy?
Are all video modes we want to use multiples of 64 ? I guess yes.
Does the hardware register allow denormalized numbers? Since you want to divide
by 64 only, this would allow you to use a fixed exponent.
Erm, no idea, will need to try. That say, i don't know much about
floating point numbers, so i really don't know all that much about
denormalized numbers.

Mmm, i guess you mean that since we divide by 64, the mantissa would
always be 0 (1.000...) and we only need to write 127 + log2(value) in it
?  
Friendly,

Sven Luther


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help