Commit 80637a6afd873791ba1766ba7b29b02aca7fd90c

Authored by blueswir1
1 parent e42c20b4

Shuffle code to avoid NetBSD gcc 3.4.6 inlining bug (Rumko)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3924 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 43 additions and 44 deletions
hw/slavio_serial.c
@@ -215,7 +215,6 @@ struct SerialState { @@ -215,7 +215,6 @@ struct SerialState {
215 static void handle_kbd_command(ChannelState *s, int val); 215 static void handle_kbd_command(ChannelState *s, int val);
216 static int serial_can_receive(void *opaque); 216 static int serial_can_receive(void *opaque);
217 static void serial_receive_byte(ChannelState *s, int ch); 217 static void serial_receive_byte(ChannelState *s, int ch);
218 -static inline void set_txint(ChannelState *s);  
219 218
220 static void clear_queue(void *opaque) 219 static void clear_queue(void *opaque)
221 { 220 {
@@ -321,28 +320,6 @@ static void slavio_serial_reset(void *opaque) @@ -321,28 +320,6 @@ static void slavio_serial_reset(void *opaque)
321 slavio_serial_reset_chn(&s->chn[1]); 320 slavio_serial_reset_chn(&s->chn[1]);
322 } 321 }
323 322
324 -static inline void clr_rxint(ChannelState *s)  
325 -{  
326 - s->rxint = 0;  
327 - s->rxint_under_svc = 0;  
328 - if (s->chn == chn_a) {  
329 - if (s->wregs[W_MINTR] & MINTR_STATUSHI)  
330 - s->otherchn->rregs[R_IVEC] = IVEC_HINOINT;  
331 - else  
332 - s->otherchn->rregs[R_IVEC] = IVEC_LONOINT;  
333 - s->rregs[R_INTR] &= ~INTR_RXINTA;  
334 - } else {  
335 - if (s->wregs[W_MINTR] & MINTR_STATUSHI)  
336 - s->rregs[R_IVEC] = IVEC_HINOINT;  
337 - else  
338 - s->rregs[R_IVEC] = IVEC_LONOINT;  
339 - s->otherchn->rregs[R_INTR] &= ~INTR_RXINTB;  
340 - }  
341 - if (s->txint)  
342 - set_txint(s);  
343 - slavio_serial_update_irq(s);  
344 -}  
345 -  
346 static inline void set_rxint(ChannelState *s) 323 static inline void set_rxint(ChannelState *s)
347 { 324 {
348 s->rxint = 1; 325 s->rxint = 1;
@@ -367,6 +344,49 @@ static inline void set_rxint(ChannelState *s) @@ -367,6 +344,49 @@ static inline void set_rxint(ChannelState *s)
367 slavio_serial_update_irq(s); 344 slavio_serial_update_irq(s);
368 } 345 }
369 346
  347 +static inline void set_txint(ChannelState *s)
  348 +{
  349 + s->txint = 1;
  350 + if (!s->rxint_under_svc) {
  351 + s->txint_under_svc = 1;
  352 + if (s->chn == chn_a) {
  353 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  354 + s->otherchn->rregs[R_IVEC] = IVEC_HITXINTA;
  355 + else
  356 + s->otherchn->rregs[R_IVEC] = IVEC_LOTXINTA;
  357 + } else {
  358 + s->rregs[R_IVEC] = IVEC_TXINTB;
  359 + }
  360 + }
  361 + if (s->chn == chn_a)
  362 + s->rregs[R_INTR] |= INTR_TXINTA;
  363 + else
  364 + s->otherchn->rregs[R_INTR] |= INTR_TXINTB;
  365 + slavio_serial_update_irq(s);
  366 +}
  367 +
  368 +static inline void clr_rxint(ChannelState *s)
  369 +{
  370 + s->rxint = 0;
  371 + s->rxint_under_svc = 0;
  372 + if (s->chn == chn_a) {
  373 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  374 + s->otherchn->rregs[R_IVEC] = IVEC_HINOINT;
  375 + else
  376 + s->otherchn->rregs[R_IVEC] = IVEC_LONOINT;
  377 + s->rregs[R_INTR] &= ~INTR_RXINTA;
  378 + } else {
  379 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  380 + s->rregs[R_IVEC] = IVEC_HINOINT;
  381 + else
  382 + s->rregs[R_IVEC] = IVEC_LONOINT;
  383 + s->otherchn->rregs[R_INTR] &= ~INTR_RXINTB;
  384 + }
  385 + if (s->txint)
  386 + set_txint(s);
  387 + slavio_serial_update_irq(s);
  388 +}
  389 +
370 static inline void clr_txint(ChannelState *s) 390 static inline void clr_txint(ChannelState *s)
371 { 391 {
372 s->txint = 0; 392 s->txint = 0;
@@ -389,27 +409,6 @@ static inline void clr_txint(ChannelState *s) @@ -389,27 +409,6 @@ static inline void clr_txint(ChannelState *s)
389 slavio_serial_update_irq(s); 409 slavio_serial_update_irq(s);
390 } 410 }
391 411
392 -static inline void set_txint(ChannelState *s)  
393 -{  
394 - s->txint = 1;  
395 - if (!s->rxint_under_svc) {  
396 - s->txint_under_svc = 1;  
397 - if (s->chn == chn_a) {  
398 - if (s->wregs[W_MINTR] & MINTR_STATUSHI)  
399 - s->otherchn->rregs[R_IVEC] = IVEC_HITXINTA;  
400 - else  
401 - s->otherchn->rregs[R_IVEC] = IVEC_LOTXINTA;  
402 - } else {  
403 - s->rregs[R_IVEC] = IVEC_TXINTB;  
404 - }  
405 - }  
406 - if (s->chn == chn_a)  
407 - s->rregs[R_INTR] |= INTR_TXINTA;  
408 - else  
409 - s->otherchn->rregs[R_INTR] |= INTR_TXINTB;  
410 - slavio_serial_update_irq(s);  
411 -}  
412 -  
413 static void slavio_serial_update_parameters(ChannelState *s) 412 static void slavio_serial_update_parameters(ChannelState *s)
414 { 413 {
415 int speed, parity, data_bits, stop_bits; 414 int speed, parity, data_bits, stop_bits;