Inside MATH.H header file is defined the prototype of function pow :
Code:
extern float pow (float x, float y);
In order to match the type of parameters that will receive the value of the arguments you have to use float, even if playing with integer type variable covers your need as well.
Unfortunately the 8051 instruction set was not design for floating point operation, that's why the big object code.
Try to make your own function "pow" with integer type parameters. You'll notice a huge code size decreasing compared with the above approach.